使用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
相关产品推荐
相关产品推荐

