#include <stdio.h>
int main()
{
char name[10];
for(int i=0;i<=10;i++)
{
printf("Who are you? ");
if(fgets(name,10,stdin)!=NULL)
printf("Glad to meet you, %s.\n",name);
}
return(0);
}
当我输入超过10个字符时,循环跳过。
Who are you? aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Glad to meet you, aaaaaaaaa.
Who are you? Glad to meet you, aaaaaaaaa.
Who are you? Glad to meet you, aaaaaaaaa.
Who are you? Glad to meet you, aaaaaaaaa.
Who are you? Glad to meet you, aaaaaaaaa.
Who are you? Glad to meet you, aaaaaaaaa.
Who are you? Glad to meet you, aaaaaaa
我想我想从剩余的字符中清除输入缓冲区。什么是最好的方法呢?
5条答案
按热度按时间3htmauhk1#
检查
name
中是否存在换行符。1aaf6o9v2#
检查
fgets()
是否获得了'\n'
。如果没有'\n'
,则当前行中的某些字符尚未读取。您可以简单地忽略它们。to94eoyn3#
来自
fgets
的文档(强调为我的):因此,您的输入(超出缓冲区)以9个字符(+1个空终止字符)的块读取。
您需要反复调用
fgets
,直到最后读取的字符是换行符(\n)。mm9b1k5b4#
您需要使用类似下面的代码来查找
\n
:注意:不确定这是一个bug还是一个特性,但是短名称将包含最后的
\n
。zf2sa74q5#
使用
strchr()
判断stdin
中是否有垃圾剩余,如果有,则使用getchar()
、while循环和continue
的常用组合来清理垃圾:并且输出:
这确实是预期的行为。