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
相关产品推荐
相关产品推荐

