gpt4 book ai didi

c - 当 getchar 还没有收到换行符时是否有办法打印

转载 作者:行者123 更新时间:2023-11-30 17:33:59 25 4
gpt4 key购买 nike

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

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

程序在收到换行符('\n')之前不会打印任何内容

我正在使用:gcc 版本 3.4.2

最佳答案

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

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

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

关于c - 当 getchar 还没有收到换行符时是否有办法打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23549031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com