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

Windows下K&R C统计程序printf仅输出首个数字,macOS正常,求原因

Windows下C程序printf输出不完整问题排查与解决

问题场景

运行《C程序设计语言》中的统计行数、单词数、字符数示例代码:

#include <stdio.h>

#define IN 1
#define OUT 0

int main() {

    int c, nl, nw, nc, state; 

    state = OUT; 
    nl = nw = nc = 0; 
    while ((c = getchar()) != EOF) {
        ++nc; 
        if (c == '\n') 
            ++nl;
        if (c == ' ' || c == '\n' || c == '\t') 
            state = OUT;
        else if (state == OUT) {
            state = IN; 
            ++nw;
        } 
    }
    printf("%d %d %d\n", nl, nw, nc);
}

在Windows系统(VS Code编辑、gcc编译)下,输入以下内容后:

a       
ab 
abc
abcd

实际仅输出4,期望输出为4 4 14;但在macOS下运行正常。

问题根源

Windows与类Unix系统(如macOS)的EOF输入方式存在差异:

  • macOS等类Unix系统用Ctrl+D触发EOF
  • Windows下正确触发EOF的方式是Ctrl+Z(需单独输入一行,或在输入内容末尾按下Ctrl+Z后回车)

误将Ctrl+C作为EOF输入是问题核心:Ctrl+C会直接终止程序进程,导致程序还未执行完printf的完整输出逻辑(或输出缓冲区未被刷新),因此仅输出部分结果。

验证与解决

使用正确的EOF输入方式:在输入完指定内容后,单独一行按下Ctrl+Z再回车,程序会正常执行完循环逻辑,输出完整的4 4 14结果。

内容的提问来源于stack exchange,提问作者L1M80 54N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:05:58