You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:04:58