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

为什么C语言printf输出long类型值搭配换行符时会产生垃圾值?

问题诊断:统计字符程序输出额外D字符的原因

你遇到的问题和字符串缺少\0空终止符完全无关,你的代码中没有涉及字符串输出操作,printf输出的是long类型的数值,不存在字符串终止符的相关问题。

根本原因

额外出现的字母D不是你的程序输出的内容,是终端控制字符回显的残留:

  • 类Unix系统的终端默认会将Ctrl+D这个控制输入回显为^D
  • 你输入abc后没有按换行,直接按下Ctrl+D发送EOF时,终端先输出了^D,紧接着你的程序输出的3刚好覆盖了^字符,剩下的D就留在了3的后方,看起来就像是程序输出了3D

验证方法

你可以通过两种方式验证这个结论:

  • 输入abc后先按下回车键,再按Ctrl+D发送EOF,此时程序输出只会显示3,不会出现额外的D
  • 修改代码的输出语句为printf("统计结果:%ld\n", nc);,你会看到D字符会出现在整行输出的最前方,明显不属于程序的输出内容

代码优化建议

你目前的代码使用的是旧版C语法,建议按照C标准调整main函数的写法,避免在新编译器下出现警告:

#include <stdio.h>

int main()
{
    int c;
    long nc = 0;

    while ((c = getchar()) != EOF) {
        if (c == '\n') {
            continue;
        }
        ++nc;
    }
    printf("%ld\n", nc);
    return 0;
}

内容的提问来源于stack exchange,提问作者Alan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:48:01