gpt4 book ai didi

c - 为什么这个 C 程序在输出中打印奇怪的字符?

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

我有以下程序:

#include <stdio.h>

int main()
{
int ch;
while( ch = getchar() != '\n') {
printf("Read %c\n",ch);
}
return 0;
}

无论我输入什么,我都会得到:

Read  

为什么会这样?我看到的那个奇怪的字符是什么?

Stackoverflow 不打印奇怪的字符。你可以在这里看到它:http://ideone.com/EfZHr

最佳答案

您需要将括号放在:

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

Precedence != 大于 =

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

等同于:

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

读取一个char,将其与换行符进行比较,然后将比较结果赋值给ch。现在比较的结果是0(输入换行符时)或1(输入其他任何内容时)

您看到的奇怪字符是 control char对于值 1,ASCII 1 没有可打印的符号,所以我猜是 shell 在其中打印了值 0001 的怪异字符。

您可以通过将程序输出管道传输到八进制转储 (od) 来确认它:

$ echo 'a' | ./a.out | od -bc         # user entered 'a'
0000000 122 145 141 144 040 001 012
R e a d 001 \n
here you go ----------------^


$ echo '\n' | ./a.out | od -bc # user entered '\n'
0000000

当与 -Wall 一起使用时,GCC 会警告您:

warning: suggest parentheses around assignment used as truth value

关于c - 为什么这个 C 程序在输出中打印奇怪的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626905/

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