CLion中C程序输出表情符号而非字符的原因解惑
输入字符却输出表情符号的原因分析
先看你写的代码:
#include <stdio.h> int main() { int c; while ((c = getchar() != EOF)) putchar(c); }
你的问题:
我原本期望程序输出与输入一致的内容,但实际却显示表情符号。单独使用getchar和putchar时能正常输出预期结果,即使输入单个字符也会返回表情符号。我是C语言和CLion的新手,希望能得到帮助。
补充:我已找到问题根源是while循环的括号使用错误,但仍不理解为何会显示表情符号?
问题本质:运算符优先级导致的赋值错误
C语言里!=的优先级比=高,所以你的代码中(c = getchar() != EOF)的实际执行顺序是:
- 调用
getchar()读取一个字符 - 判断该字符是否不等于
EOF,得到布尔结果(C语言用1表示真,0表示假) - 把这个
1或0赋值给变量c
为什么会输出表情符号?
putchar()会把传入的整数当作ASCII码输出对应字符。ASCII码里:
0对应空字符(通常不可见)1对应标题开始(SOH),这是一个不可打印的控制字符
很多终端会把这类不可打印的控制字符渲染成表情符号或特殊符号,这就是你看到表情的原因——你每次输入字符后,程序实际在输出ASCII码为1的控制字符,而非你输入的内容。
修正后的代码
把赋值操作单独括起来,确保先完成赋值再判断:
#include <stdio.h> int main() { int c; while ((c = getchar()) != EOF) putchar(c); }
内容的提问来源于stack exchange,提问作者AryNsachan
相关产品推荐
相关产品推荐

