“该函数将写入无符号字符集的字符返回到错误”:see Putchar的int或EOF。 为了做练习,我制作了这个程序:
#include<stdio.h>
int main(void){
for(putchar('1'); putchar('2'); putchar('3'))
putchar('4');
return 0;
}
导致无限循环输出...432432432432432...
。
我无法理解这种结果背后的原因。我期望循环一遍又一遍地打印相同的数字。我指的是putchar('4')的值,其中字符'4'应该被提升为int 52.为什么这样的促销不符合我的预期?
答案 0 :(得分:4)
在您的情况下,根据循环政策,
putchar('1')
执行一次。putchar('2')
,找到TRUTHY,执行putchar('4');
,然后执行putchar('3');
。putchar('2')
是FALSY(从未发生过)。与问题“....相关,其中字符'4'应提升为int 52”,引用C11
,§7.21.7,(强调我的)
fputc
函数写入c
指定的字符(转换为无符号) char)到stream
指向的输出流,[...]
和
putchar
函数相当于putc
,第二个参数为stdout
。
因此,它是将要打印的字符表示,而'4'
的字符表示是4
。
答案 1 :(得分:2)
它会打印124324324324....
,因为putchar(1)
在循环开始时执行,而不会再次执行。
Putchar在标准输出上打印char
,并返回char
投放到int
的{{1}}。它不会将char
转换为int
到标准输出。如果您说:putchar('z')
,则会打印'z'
putchar(2)
并返回char&#39; 2&#39;的int值。这恰好是非零。这也意味着循环永远不会结束。
putchar('3')
在每次迭代结束时执行。
putchar('4')
。
这就是你得到那个输出的原因。
答案 2 :(得分:0)
因为putchar('2')总是!= 0而你执行putchar('4')然后执行putchar('3)然后条件检查putchar('2')总是如此,你去了到这个循环的开头