gpt4 book ai didi

c - printf vs putchar - 不同的输出

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

我有这个简单的代码(尝试在 KandR 中做一个练习):-

#include <stdio.h>

int main(){
int c = EOF;

while(c=(getchar() != EOF)){
printf("%d",c);
}

return 0;
}

当我运行它并输入任何字符(单个字符)时,我得到的输出为 11。如果我输入多个字符,例如“bbb”,我得到的输出为 1111。我知道我已经明确地添加了括号优先考虑 getchar() != EOF 的条件检查,它应该导致 1 或 0。但我不明白为什么我得到多个 1。

另一种情况是:

#include <stdio.h>

int main(){
int c = EOF;

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

return 0;
}

无论我输入哪个字符,我总是得到一个方框的输出,其中包含 1 和 0(如下面屏幕截图的底部所示)

enter image description here

1)第一种情况,为什么打印出来的不止1个1?

2) 为什么情况 2 的输出与情况 1 不同?

最佳答案

除非你按下 EOF,否则 (getchar() != EOF) 将返回 true 并赋值 1c。这就是为什么你得到的输出总是 11,第一个 1 代表你输入的字符,第二个 1 代表 \n 在按下 Enter 键时传递给输入缓冲区。

putchar 类似,它打印与返回值 1 对应的字符,这是不可打印的(可打印字符从 32 开始) 你会得到一些奇怪的输出,一个用于输入字符,另一个用于 \n

现在将条件表达式中的括号改为

while( (c=getchar()) != EOF ){...}   

现在它会正常工作,但在第一种情况下会给你两个 ASCII 代码(一个用于 \n)。

关于c - printf vs putchar - 不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108758/

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