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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:04:51