无论如何打印,而getchar还没有收到换行符

时间:2014-05-08 17:49:30

标签: c printing getchar

我想在捕获空格char('')时打印换行符('\ n'),同时使用getchar()读取char字符串char。 代码:

#include <stdio.h>

int main(void) {
    char c;
    int nl;

    nl=0; /* holds number of consecutive newline char */

    while (nl<2) {
    /* the loops  ends when getchar() receives
       two consecutive newline inputs */
       c=getchar();
       if (c==' ')
           putchar('\n');
       else if (c=='\n')
           nl++;
       else
           nl=0; 
    }

    getchar();
    return 0;
}

程序在收到换行符char('\ n')

之前不会打印任何内容

我正在使用:gcc版本3.4.2

1 个答案:

答案 0 :(得分:0)

你的问题是,在正常情况下,你提供输入的终端以“规范模式”启动,其中内核缓冲所有输入(并提供基本行编辑,例如退格),直到按下enter,然后发送设备上的数据作为一个整体。

您可以使用ICANONc_lflag功能关闭termios结构的tcgetattr成员的tcsetattr位来禁用此行为(确保在程序退出之前恢复旧模式),但是如果你需要,你还需要做很多工作才能恢复原始的行编辑行为。您可能还想关闭其他标志,例如输入/换行转换,输入回显等,具体取决于您的使用情况。

有些人可能会告诉您也可以通过调用setvbuf上的stdin来禁用stdio级别的缓冲,但这不是必需的,会降低性能。