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

CLion中C程序输出表情符号而非字符的原因解惑

输入字符却输出表情符号的原因分析

先看你写的代码:

#include <stdio.h>

int main() {

    int c;

    while ((c = getchar() != EOF))
        putchar(c);

}

你的问题:

我原本期望程序输出与输入一致的内容,但实际却显示表情符号。单独使用getchar和putchar时能正常输出预期结果,即使输入单个字符也会返回表情符号。我是C语言和CLion的新手,希望能得到帮助。

补充:我已找到问题根源是while循环的括号使用错误,但仍不理解为何会显示表情符号?

问题本质:运算符优先级导致的赋值错误

C语言里!=的优先级比=高,所以你的代码中(c = getchar() != EOF)的实际执行顺序是:

  1. 调用getchar()读取一个字符
  2. 判断该字符是否不等于EOF,得到布尔结果(C语言用1表示真,0表示假)
  3. 把这个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:49:51