gpt4 book ai didi

c - getchar函数清除while-condition之外的输入缓冲区?

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:44 25 4
gpt4 key购买 nike

我了解到可以像这样清空输入缓冲区:

while((ch = getchar()) != EOF && ch != '\n');
if (ch == EOF) {
// oops
}

那为什么我不能用一个字符清空缓冲区呢:

c = getchar();

这一行将使程序等待用户输入。上下文:

void strfuncs()
{
char name[50] = {0};
char lastname[50] = {0};
char c;

printf("Enter name...:");
fgets(name, 50, stdin);
printf("Enter last name...:");
fgets(lastname, 50, stdin);

c=getchar();
printf("Enter a character...:");
fgets(&c, 1, stdin);

printf("c: %c",c);
}

最佳答案

c = getchar();

如果有缓冲区,那确实会清空缓冲区一个字符。然而,鉴于人类打字的速度相对于计算机的运行速度,当该行被执行时,缓冲区很可能是空的。如果缓冲区为空 getchar将等到它不是。

while((ch = getchar()) != EOF && ch != '\n');

上面没有什么不同。大多数时候,电脑会在里面等待getchar缓冲区变为非空。

在正常模式下,当标准输入来自终端时,操作系统仅在收到换行符时或在用户强制输入 ctrl-D 时才将字符发送到程序的输入缓冲区。 (在 *nixes 上,不确定 Windows 上的等价物是什么)。该循环实际上会阻塞在第一个 getchar() 中。直到您键入整行并按下回车键。然后它会尽可能快地循环,消耗掉你输入的所有字符。这一切都发生在您按下返回键之后。

char c;        // <<<< Wrong!
c = getchar();

这与问题无关,但是 getchar() 的类型是int .这很重要,因为 EOF需要与所有可以输入的有效字符区分开来,在某些字符集中,char 的每个可能值(在所有现代常见实现中为 0 到 255 或 -128 到 127)是一个有效字符。

关于c - getchar函数清除while-condition之外的输入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44943622/

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