正如标题所说,我应该使用
while(getchar() != '\n');
每次我使用scanf?有人可以解释背后的逻辑吗
while(getchar() != '\n');
谢谢。
正如标题所说,我应该使用
while(getchar() != '\n');
每次我使用scanf?有人可以解释背后的逻辑吗
while(getchar() != '\n');
谢谢。
不,您通常不需要这样做。您发布的循环读取字符,stdin
直到遇到不是\n
. 你写它的方式,最后一个非换行符就像换行符一样丢失了。
可以通过以下方式避免典型问题或“冲洗”需求:
scanf
与其他输入法混合使用。例如,不要将其与fgets
例如,忽略空格,而不是scanf("%c"...)
使用scanf(" %c"..)
.
除此之外,当您有复杂的输入要读入时,您可能希望:
使用 读取整个字符串fgets
,然后您可以使用sscanf
等进行解析strtok
。它可能看起来很矛盾,建议sscanf
哪里scanf
不足。关键是一旦你使用 安全地存储了完整的字符串fgets
,你就有更多的自由来分析它,抛出不匹配的部分,在strchr
这里和那里做一个等等
使用更适合该工作的语言(带有库),如 python 或 perl 将任务简化为更简单的问题
使用成熟的词法分析器