简洁版本
我想摆脱多余的,从用户输入的stdin
,但我理解fflush(stdin)
不推荐使用。 我发现这个替代:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
然而,如果没有多余的数据删除,这将删除用户的下一个输入。 如何检查是否有数据从去除stdin
,所以我可以选择是否要使用清除缓冲区的这个方法?
龙版采用的解释
我做的的OBJ-C / C的命令行工具。
据我所知,声明char str[SIZE]
语法分配SIZE
字节的内存到str
。 我想,以尽可能少的内存尽量分配给每个变量,以避免浪费内存。
但是,如果您使用fgets(str,sizeof(str),stdin)
,你比输入更多 SIZE
输入字节, fgets
将采取SIZE
你输入字节并存储在str
,让所有其他缓冲区中的数据。 如果你打电话fgets
再次,剩余的数据将被储存在你传递的变量fgets
的第一变量,基本上完全跳过提示。 我不希望这种事情发生。 一个常见的解决方案是fflush(stdin)
。
各种网络资源(包括SO)的状态,使用fflush(stdin)
是不是一个好主意,因为它是“未定义”当你传递一个输入流作为参数。
我发现这个替换CProgramming.com
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
然而,相同的源提到,如果在没有多余的数据stdin
摆脱,它会做这与用户的下一个输入,所以第二次fgets
被称为它可能不会接收所有数据。
如何检查是否有数据stdin
,所以我可以决定是否要清除它?