为什么printf(“\ n”)不会进入下一行?

时间:2016-11-02 12:04:59

标签: c getch

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

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

#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;
}

2 个答案:

答案 0 :(得分:3)

因为打击&#34;输入&#34;发出回车符(\r),而不是换行符。

当我按下&#34;输入&#34;

时,当光标跳回到行的开头时,我注意到了它。

像这样修复你的代码(也将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;
}

答案 1 :(得分:3)

您可能会收到一个回车符('\r'),这是 Return 通常生成的。

所以你也需要检查一下。您的代码可以简化:

int main(void)
{
  while((ch = _getch()) != STOP)
  {
    if(ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t')
      ch = '\n';
    putchar(ch);
  }
}

由于我们每次迭代时始终只打印一个字符,因此无需使用多个打印功能。此外,使用printf()打印单个常量字符是过度的。