为什么 printf("\n") 不转到下一行?

shu*_*rok 2 c getch

我正在尝试编写一个简短的程序,将每个单词放在一个新行上。新行可以通过制表符、空格或回车来确认。程序的结尾是在控制台中输入“#”。我遇到的问题是,当我将“enter”输入控制台时,它会在同一行中写入下一个字符。

第二个想法是将所有这些都放在一个表格中,这样我最后就可以将格式化文本放在一起。这个我也想不通。

#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;
}
Run Code Online (Sandbox Code Playgroud)

Jea*_*bre 5

因为按“Enter”会发出回车符 ( \r),而不是换行符。

当我按下“enter”键时光标跳回到行首时,我注意到了这一点。

像这样修复你的代码(case也分解语句):

#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;
}
Run Code Online (Sandbox Code Playgroud)