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

C程序输出-39原因排查求助:代码出现未预期输出

为什么你的C程序会输出-39?

嘿,这问题我太熟了!咱们一步步拆解:

首先看你的代码逻辑:每次用getchar()读取一个字符,然后计算这个字符和'1'的ASCII值差,再打印出来。那输出-39意味着读取到的字符的ASCII值减去'1'的ASCII值等于-39。

先明确几个关键ASCII值:

  • '1'的ASCII值是49
  • 反过来算,这个神秘字符的ASCII值就是 49 + (-39) = 10,而ASCII值10对应的是换行符(\n)

那为什么会读取到换行符?因为getchar()会读取输入流里的每一个字符——包括你输入数字后按下的回车键!

举个例子,假设你输入的是87然后按回车:

  1. 第一个getchar()读取到'8'(ASCII56),56-49=7 → 输出7
  2. 第二个getchar()读取到'7'(ASCII55),55-49=6 → 输出6
  3. 第三个getchar()读取到你按下回车产生的换行符(ASCII10),10-49=-39 → 输出-39

如果你不想处理这类非数字字符,可以在计算前加个判断,比如只处理'0'到'9'之间的字符:

#include <stdio.h>
int main(void) {
    int c;
    while ((c = getchar()) != EOF) {
        if (c >= '0' && c <= '9') {
            printf("%d\n", (c - '1'));
        }
    }
    return 0;
}

这样就只会输出数字对应的差值,不会出现换行符带来的奇怪结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:28:53