C语言中while((c = getchar()) != EOF)为何重复执行两次?
问题原因
你输入数字后按回车时,输入缓冲区里会存两个字符:你输入的数字,还有换行符\n。getchar()一次只读取一个字符,所以第一次循环读取数字字符,第二次读取换行符,导致循环执行两次。
修正方法
给你两种常用的解决办法:
方法一:读完字符后跳过换行符
在每次循环末尾,把输入缓冲区里的换行符(以及当前行剩余的其他字符)清空:
#include <stdio.h> int main() { char c; while((c = getchar()) != EOF){ printf("c = %c\n", c); int i; for(i = 0; i< 10; i++){ printf("%d in loop\n", i); } // 跳过当前行剩余的所有字符直到换行符 while ((getchar()) != '\n'); } printf("%d - at EOF\n", c); }
注意:如果输入多个字符再回车,这个方法会跳过同行剩余的所有字符,若你需要处理多字符输入,需调整逻辑。
方法二:用scanf读取数字(仅针对数字输入场景)
如果你的需求只是读取数字,直接用scanf更省心,它会自动忽略空格、换行这类空白字符:
#include <stdio.h> int main() { int num; while(scanf("%d", &num) != EOF){ printf("num = %d\n", num); int i; for(i = 0; i< 10; i++){ printf("%d in loop\n", i); } } printf("At EOF\n"); }
内容的提问来源于stack exchange,提问作者mert onur
相关产品推荐
相关产品推荐

