从键盘读取内容时输出异常:统计空格、制表符、换行符的C程序问题求助
你的C统计程序问题排查与修复
嘿,我来帮你梳理下这个问题!你的代码核心逻辑其实是对的,但输出异常大概率是输入终止方式不对或者一些细节上的小问题导致的,咱们一步步来看:
可能的问题原因
没有正确触发EOF结束输入:
你的程序会一直读取输入直到收到EOF(文件结束符),不同系统触发EOF的方式不一样:- Windows系统:需要先按Enter换行,再按下
Ctrl+Z,最后再按Enter才能发送EOF; - Linux/macOS系统:直接按下
Ctrl+D就能发送EOF。
如果没按正确方式终止输入,程序会一直卡在等待输入的状态,强行终止的话可能会输出不符合预期的数值。
- Windows系统:需要先按Enter换行,再按下
变量名误导性(非功能问题,但影响可读性):
你把接收单个字符的变量命名为string,这很容易让人误解成字符串,虽然不影响程序运行,但会增加调试难度。忽略了非目标字符的反馈(可选优化):
你的代码只统计空格、制表符、换行符,其他字符完全跳过,如果输入里有全角空格、不间断空格这类类似空格的字符,程序不会统计,可能让你觉得结果不符合预期。
修复后的代码
我调整了代码的可读性,加上了明确的输入提示,同时保留了核心统计逻辑:
#include <stdio.h> int main() { // 用单独变量替代数组,可读性更强 int spaces = 0, tabs = 0, newlines = 0; int input_char; printf("Enter the paragraph (press Ctrl+D on Linux/macOS, Ctrl+Z on Windows to finish):\n"); while ((input_char = getchar()) != EOF) { if (input_char == ' ') { spaces++; } else if (input_char == '\t') { tabs++; } else if (input_char == '\n') { newlines++; } } printf("There are %d Spaces.\n", spaces); printf("There are %d Tabs.\n", tabs); printf("There are %d Newlines.\n", newlines); return 0; }
测试建议
- 按照提示的方式触发EOF结束输入;
- 如果需要统计全角空格这类特殊字符,可以在判断里加上对应的字符值(比如全角空格的ASCII是
0x3000); - 测试时可以输入一段明确包含空格、制表符、换行的文本,比如:
之后触发EOF,看看统计结果是否符合预期。Hello world! (this is a tab) This is a new line.
内容的提问来源于stack exchange,提问作者M K Sundaram
相关产品推荐
相关产品推荐

