为什么clion中的输出显示笑脸而不是字符?

mwngjboj  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(99)

我期待它的结果是同样的事情回来,但由于某种原因,它只是没有和显示笑脸。运行普通的getchar和putchar可以正常工作,并给出预期的输出。即使输入单个字符也只会返回一个笑脸。我是新的c和clion,所以我会感激的帮助。
编辑:我找到了问题的原因。while循环上的括号没有正确使用。但还是不明白为什么要画笑脸?

#include <stdio.h>

int main() {

    int c;

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

}
pjngdqdw

pjngdqdw1#

你有

( c = getchar() != EOF )

而不是

( c = getchar() ) != EOF

这意味着您将不等式的结果赋给c(而不是getchar()的结果),并且不等式返回0(在x处)或1(否则)。
所以你正在打印字符1。根据主机的代码页,它可能是U+263 A白色SMILING FACE,“微笑”。

6vl6ewon

6vl6ewon2#

原因很简单。
在你的代码中,你总是打印字符代码1(除非c == EOF时,它将0),因为你分配c与结果,如果比较getchar()) != EOF,它只能是01。代码可以写成while(c=(getchar()!=EOF))
在代码页中,它是一个笑脸
首先需要赋值c,然后比较:

int main() 
{
    int c;
    while ((c = getchar()) != EOF)
        putchar(c);
}

顺便说一句,这是一个非常好的候选人的警告,但不幸的是,海湾合作委员会和Clang不发出它

相关问题