C语言字符统计代码无输出求助:输入后未返回统计结果
问题分析与修复方案
你的代码核心问题出在循环的赋值和条件判断上,导致无法正确统计字符,自然无法输出结果,具体问题和修复如下:
循环逻辑错误
原代码里while ((c = scanf("%c", &c)) != EOF)完全错误:scanf("%c", &c)的返回值是成功读取的字符数量(正常为1,遇到文件结束符时是EOF),你把这个返回值赋值给了c,导致c存的不是输入的字符,而是scanf的状态值,统计逻辑完全失效,循环也无法正常终止。
正确写法有两种:- 用
scanf正确判断返回值:while (scanf("%c", &c) != EOF) - 改用
getchar()更简洁,它直接返回读取的字符,遇到EOF时返回EOF:while ((c = getchar()) != EOF)
- 用
冗余分号
循环结束后的};多了一个分号,虽然不影响语法,但属于多余代码,建议去掉。
修复后的完整代码:
#include <stdio.h> int main(void) { int blanks = 0, digits = 0, letters = 0, others = 0; char c; printf("请输入内容,输入结束按Ctrl+Z(Windows)或Ctrl+D(Linux):\n"); while ((c = getchar()) != EOF) { if (c == ' ') ++blanks; else if (c >= '0' && c <= '9') ++digits; else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) ++letters; else ++others; } printf("blanks = %d, digits = %d, letters = %d, others = %d\n", blanks, digits, letters, others); return 0; }
运行说明:输入任意内容,结束时按对应系统的结束键,程序就会输出各类字符的统计结果。
内容的提问来源于stack exchange,提问作者dipanshuu447
相关产品推荐
相关产品推荐

