gpt4 book ai didi

c - putchar() 奇怪的输出,为什么会这样?

转载 作者:太空狗 更新时间:2023-10-29 16:42:01 24 4
gpt4 key购买 nike

如果我在标准输入流中输入单词“Hello World”,该程序将打印出奇怪的框符号而不是预期的“Hello World”返回到标准输出。

#include <stdio.h>

int main(void)
{
// print out all characters from the stream until '/n' character is found
int ch;
while (ch = getchar() != '\n')
{
putchar(ch);
}
putchar('\n');
}

我知道如何解决这个问题。但是为什么这行代码不正确呢?

while (ch = getchar() != '\n')

最佳答案

(ch = getchar() != '\n') 应该重写为

((ch = getchar()) != '\n')

因为 !=C operator precedence table 中比 = 绑定(bind)得更紧.运算符并不像人们预期的那样从左到右(英语阅读方向)排序。例如 2 + 3 * 5 的结果是 17不是 25。这是因为 * 会在执行 + 之前执行,因为 * 运算符比 + 运算符具有更高的优先级。

所以当你写类似的东西时

ch = getchar() != '\n'

您希望它等同于:(ch = getchar()) != '\n'

但实际上它等同于:ch = (getchar() != '\n')

因为 != 的结果是 truefalse,您会在屏幕上看到字符 \001 .我相信 \001 在您的系统上显示为框 1


1:字符 \001 可能显示为框或点或一些奇怪的字符,或者它可能根本不会出现在输出中。

关于c - putchar() 奇怪的输出,为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com