C语言字符计数程序输出4D异常问题及正确实现咨询
问题分析与解决
异常输出的原因
你的程序每次循环会调用两次getchar():一次在while的条件判断里,另一次在if的条件判断里。这会导致程序跳过每两个字符中的一个,同时错误处理换行符:
- 比如输入
hello加换行,while读取'h'进入循环,if读取'e'(非换行,nc+1);接着while读取'l',if读取'l'(nc+1);while读取'o',if读取'\n'(等于换行,不计数)。这一段实际只统计了2个字符,而非预期的5个。 - 输入内容共有10个非换行字符,但因重复读取导致字符丢失,加上输入结束时的读取混乱,最终出现异常的
4D输出。
正确实现统计除换行符外的所有字符
每次循环仅读取一个字符并保存到变量中,基于该变量判断是否计数:
#include <stdio.h> int main(int argc, char *argv[]) { long nc = 0; int c; // 用int存储getchar()返回值,因为EOF是int类型 while ((c = getchar()) != EOF) { if (c != '\n') { nc++; } } printf("%ld\n", nc); return 0; }
要点说明:
- 用
int存getchar()返回值:getchar()返回unsigned char转换的int或负整数EOF,用char存储可能无法正确识别EOF。 - 单次读取避免字符丢失:循环内仅调用一次
getchar(),确保每个字符都被处理。
内容的提问来源于stack exchange,提问作者thiebo
相关产品推荐
相关产品推荐

