输入一个y被gerchar()读取那不应该在输入一个y被被scanf读取吗为什么只要输一个y
printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n", count);printf("是否打印所有式子(y/n):");
getchar();
scanf("%c", &answer); 这是因为 `getchar()` 用来捕获之前输入留下的换行符(或其他不需要的字符)。当你按下回车键时,输入缓冲区中实际上还有一个换行符被存留。`getchar()` 会读取并丢弃这个换行符。
这样当你使用 `scanf("%c", &answer);` 时,可以正确地读取到你输入的 `y` 或 `n`,不受之前换行符的干扰。因此,你只需要再输入一个 `y` 就足够了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 jackz007 于 2024-10-23 23:29 编辑
凡是使用 scanf() 读取过键盘输入,在键盘缓冲区中一定会遗留一个换行符,接下来,当需要从键盘读取单个字符的时候,这个被遗留在键盘缓冲区的换行符很有可能会成为下一个从键盘读到的字符,从而得到非预期的运行结果(感觉程序并未等待从键盘输入这个字符,而是直接按照键入非 'Y' 的逻辑继续运行了),所以,在这种情况下,就需要先使用一个 getchar() 取走遗留在键盘缓冲区中的换行符,然后,再从键盘读取这个预期的字符。
页:
[1]