Search code examples
cgetch

Why printf("\n") doesn't go to the next line?


I'm trying to write a short program that puts each word on a new line. The new line can be confirmed by tabulator, space or enter. The end of program is putting "#" in console. I have the problem that when I put "enter" to the console it writes next characters in the same line.

The second idea is to make all of this in a table, so I can put formatted text all together in the end. I can't figure this out either.

#include<stdio.h>
#include <conio.h>
#define STOP '#'
int main()

{

    char ch;
    while ((ch = (_getch())) != STOP) {
        switch (ch) {
        case '\n':
            printf("\n");
            break;
        case '\t':
            printf("\n");
            break;
        case ' ':
            printf("\n");
            break;
        default:
            putchar(ch);
        }

    }

    printf("\nEND");
    _getch();


    return 0;
}

Solution

  • Because hitting "enter" issues a carriage return char (\r), not a linefeed one.

    I noticed it when the cursor jumped back at the start of the line when I pressed "enter".

    Fix your code like this (factorize the case statements too):

    #include<stdio.h>
    #include <conio.h>
    #define STOP '#'
    int main()
    
    {
    
        char ch;
        while ((ch = (_getch())) != STOP) {
            switch (ch) {
             case ' ':
             case '\t':
             case '\r':   // what was missing
                printf("\n");
                break;
            default:
                putchar(ch);
            }
    
        }
    
        printf("\nEND");
        _getch();
    
    
        return 0;
    }