gpt4 book ai didi

c - 打印输入字符时,getchar/putchar 返回带问号的框

转载 作者:行者123 更新时间:2023-12-02 05:47:10 27 4
gpt4 key购买 nike

在 Windows 10(丹麦语)上的 Codeblocks 中使用来自 K&R 的代码示例。以下示例按预期工作:

#include <stdio.h>

int main() {
char c = 'a';
putchar(c);
}

但是,以下打印了一系列带问号的框,数字与我键入的字符数相同:
#include <stdio.h>

int main() {
char c;

while (c = getchar() != '\n') {
putchar(c);
}
}

所以它看起来像一个编码问题。运行时,命令提示符打开,标题中包含“C:\Users\username\Desktop\filename.exe”,我的用户名包含丹麦字符“å”,该字符被“Õ”替换。命令提示符使用 CP 850 字符集。

(顺便说一句,我没有检查字符是否等于 EOF ,因为这会产生奇怪的结果。按 enter 会打印预期数量的框,加上一个 \n ,但它不会结束程序。)

最佳答案

您在这里看到了运算符优先级的问题。正如您在 this chart 上看到的, =优先级低于 != .

这意味着 getchar() != '\n'首先被评估。

对于编译器,您的代码如下所示:

#include <stdio.h>

int main() {
char c;

while (c = (getchar() != '\n')) {
putchar(c);
}
}

由于“c”得到的值不正确(表达式的真/假评估),因此输出不正确,并且程序给出了您所看到的行为,但是
#include <stdio.h>

int main() {
char c;

while ((c = getchar()) != '\n') { //<----notice brackets around c=getchar
putchar(c);
}
}

给出您期望的输出。这说明了这样一个事实,为了安全起见,您应该始终将此类表达式括起来。

关于c - 打印输入字符时,getchar/putchar 返回带问号的框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54530350/

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