我想在捕获空格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
答案 0 :(得分:0)
你的问题是,在正常情况下,你提供输入的终端以“规范模式”启动,其中内核缓冲所有输入(并提供基本行编辑,例如退格),直到按下enter,然后发送设备上的数据作为一个整体。
您可以使用ICANON
和c_lflag
功能关闭termios
结构的tcgetattr
成员的tcsetattr
位来禁用此行为(确保在程序退出之前恢复旧模式),但是如果你需要,你还需要做很多工作才能恢复原始的行编辑行为。您可能还想关闭其他标志,例如输入/换行转换,输入回显等,具体取决于您的使用情况。
有些人可能会告诉您也可以通过调用setvbuf
上的stdin
来禁用stdio级别的缓冲,但这不是必需的,会降低性能。