0

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

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

每次我使用scanf?有人可以解释背后的逻辑吗

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

谢谢。

4

1 回答 1

6

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

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

  • scanf与其他输入法混合使用。例如,不要将其与fgets
  • 前面带有空格的格式说明符,其中空格不会被忽略并且您希望它被忽略

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


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

  • 使用 读取整个字符串fgets,然后您可以使用sscanf等进行解析strtok。它可能看起来很矛盾,建议sscanf哪里scanf不足。关键是一旦你使用 安全地存储了完整的字符串fgets,你就有更多的自由来分析它,抛出不匹配的部分,在strchr这里和那里做一个等等

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

  • 使用成熟的词法分析器

于 2013-02-28T22:16:30.560 回答