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

使用putchar()输出!=比较结果出现问号,为何printf()正常?

为什么putchar()无法正常输出比较结果?

这问题挺典型的,核心是putchar()和printf()的功能本质差异,以及C语言里布尔表达式的返回值特性,咱们一步步拆解:

  • C语言中比较表达式的返回值:getchar() != EOF 是一个布尔判断,在C语言里它的返回值是int类型——如果输入不是EOF(条件成立),返回整数1;如果输入是EOF(条件不成立),返回整数0。这俩都是纯整数,不是可直接显示的字符。

  • putchar()的工作逻辑:putchar(c) 的作用是把参数c对应的ASCII字符输出到控制台。但1和0对应的ASCII码都是控制字符:

    • 0是空字符(NUL),控制台根本不会显示任何内容;
    • 1是标题开始符(SOH),属于不可打印的控制字符,大多数控制台会用?这类占位符来表示这种无法显示的字符,这就是你看到问号的原因。
  • printf("%d", ...)的工作逻辑:当你用printf("%d", ...)时,%d格式符会告诉printf把传入的整数直接以十进制数字的形式输出,不管它是不是可打印字符。所以1就显示成数字1,0显示成数字0,看起来就“正常”了。

如果想用putchar输出这个比较结果的数字形式,你需要把整数转换成对应的字符——给整数加上字符'0'的ASCII码值就行,因为字符'0'的ASCII码是48,1 + '0'等于49,对应字符'1',0 + '0'等于48,对应字符'0'。修改后的代码如下:

#include <stdio.h>
int main() {
    int c;
    c = getchar() != EOF;
    putchar(c + '0'); // 将整数转换为对应的数字字符输出
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:00