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然后按回车:
- 第一个
getchar()读取到'8'(ASCII56),56-49=7 → 输出7 - 第二个
getchar()读取到'7'(ASCII55),55-49=6 → 输出6 - 第三个
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
相关产品推荐
相关产品推荐

