正如标题所说,我应该使用
while(getchar() != '\n');
每次我使用scanf? 谁能解释一下背后的逻辑
while(getchar() != '\n');
谢谢。
最佳答案
不,您通常不需要这样做。您发布的循环从 stdin
读取字符,直到它遇到一个不是 \n
的字符。按照你写的方式,最后一个非换行符 字符丢失了,就像换行符一样。
可以通过以下方式避免典型问题或需要“冲洗”:
- 不要将
scanf
与其他输入法混合使用。例如,不要将它与fgets
混合使用
- 在格式说明符前加一个空格,其中空格不会被忽略,您希望它被忽略
例如,要忽略空格,而不是 scanf("%c"...)
使用 scanf("%c"..)
。
除此之外,当您要读入复杂的输入时,您可能希望:
使用
fgets
读取整个字符串,然后您可以使用sscanf
、strtok
等随意解析。它可能看起来很矛盾,在scanf
不足的地方推荐sscanf
。关键是一旦您使用fgets
安全地存储了完整的字符串,您就可以更自由地分析它,抛出不匹配的部分,执行strchr
到处都是使用更适合工作的语言(带库),例如 python 或 perl,将任务简化为更简单的问题
使用成熟的词法分析器
关于c - 在 C 语言中,每次使用 scanf 清除缓冲区时,我都应该使用 FLUSH 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146672/