“函数返回写成无符号字符的字符,在错误时转换为int或EOF”:见Putchar。为了练习,我制作了这个程序:
#include<stdio.h>
int main(void){
for(putchar('1'); putchar('2'); putchar('3'))
putchar('4');
return 0;
}它的结果是输出...432432432432432...的无限循环。我不明白为什么会有这样的结果。我希望循环能一次又一次地打印相同的数字。我指的是putchar( '4‘)的值,其中字符’4‘应该提升到int 52。为甚麽这样的升职不如我所料呢?
发布于 2017-07-13 13:56:45
在您的情况下,按照循环策略,
putchar('1')只执行一次。putchar('2')进行评估,找到TRUTHY,执行putchar('4');,然后执行putchar('3');。putchar('2')是FALSY (这从来不会发生)。关于"....where的字符'4‘应该提升到int 52“,引用了C11,第7.21.7节(强调”我的“)
fputc函数将由c指定的字符(转换为无符号字符)写入stream指向的输出流,.
和
putchar函数等价于带有第二个参数stdout的putc。
所以,要打印的是字符表示,'4'的字符表示是,嗯,4。
发布于 2017-07-13 14:00:37
它确实打印了124324324324....,因为putchar(1)是在循环开始时执行的,以后再也不会执行了。
Putchar在标准输出上打印char,并将相同的char返回给int。它不将char转换为int到标准输出。如果你说:putchar('z'),它会打印'z'
putchar(2)在每次迭代开始时返回字符'2‘的int值,这恰好是非零。这也意味着循环永远不会结束。
putchar('3')在每次迭代结束时执行。
每个迭代的开始和结束之间的putchar('4')。这就是你得到输出的原因。
发布于 2017-07-13 13:54:06
因为putchar('2')总是!= 0,所以您执行putchar('4'),然后对其中的putchar('3)进行操作,然后条件检查putchar ('2'),它总是真的,然后进入这个循环的开头。
https://stackoverflow.com/questions/45082725
复制相似问题