gpt4 book ai didi

c - 在 C 语言中,每次使用 scanf 清除缓冲区时,我都应该使用 FLUSH 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:20 24 4
gpt4 key购买 nike

正如标题所说,我应该使用

while(getchar() != '\n'); 

每次我使用scanf?谁能解释一下背后的逻辑

while(getchar() != '\n');

谢谢。

最佳答案

不,您通常不需要这样做。您发布的循环从 stdin 读取字符,直到它遇到一个不是 \n 的字符。按照你写的方式,最后一个非换行符 字符丢失了,就像换行符一样。

可以通过以下方式避免典型问题或需要“冲洗”:

  • 不要将 scanf 与其他输入法混合使用。例如,不要将它与 fgets
  • 混合使用
  • 在格式说明符前加一个空格,其中空格不会被忽略,您希望它被忽略

例如,要忽略空格,而不是 scanf("%c"...) 使用 scanf("%c"..)


除此之外,当您要读入复杂的输入时,您可能希望:

  • 使用 fgets 读取整个字符串,然后您可以使用 sscanfstrtok 等随意解析。它可能看起来很矛盾,在 scanf 不足的地方推荐 sscanf。关键是一旦您使用 fgets 安全地存储了完整的字符串,您就可以更自由地分析它,抛出不匹配的部分,执行 strchr到处都是

  • 使用更适合工作的语言(带库),例如 python 或 perl,将任务简化为更简单的问题

  • 使用成熟的词法分析器

关于c - 在 C 语言中,每次使用 scanf 清除缓冲区时,我都应该使用 FLUSH 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146672/

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