首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带putchar的整数提升

带putchar的整数提升
EN

Stack Overflow用户
提问于 2017-07-13 13:52:36
回答 3查看 293关注 0票数 1

“函数返回写成无符号字符的字符,在错误时转换为int或EOF”:见Putchar。为了练习,我制作了这个程序:

代码语言:javascript
复制
#include<stdio.h>

int main(void){
  for(putchar('1'); putchar('2'); putchar('3'))
    putchar('4');
  return 0;
}

它的结果是输出...432432432432432...的无限循环。我不明白为什么会有这样的结果。我希望循环能一次又一次地打印相同的数字。我指的是putchar( '4‘)的值,其中字符’4‘应该提升到int 52。为甚麽这样的升职不如我所料呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-13 13:56:45

在您的情况下,按照循环策略,

  • putchar('1')只执行一次。
  • putchar('2')进行评估,找到TRUTHY,执行putchar('4');,然后执行putchar('3');
  • 回到前面的步骤,除非putchar('2')是FALSY (这从来不会发生)。
  • 因此,无限循环,每个循环迭代都包括三个 putchar语句。

关于"....where的字符'4‘应该提升到int 52“,引用了C11,第7.21.7节(强调”我的“)

fputc函数将由c指定的字符(转换为无符号字符)写入stream指向的输出流,.

putchar函数等价于带有第二个参数stdoutputc

所以,要打印的是字符表示,'4'的字符表示是,嗯,4

票数 4
EN

Stack Overflow用户

发布于 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')。这就是你得到输出的原因。

票数 2
EN

Stack Overflow用户

发布于 2017-07-13 13:54:06

因为putchar('2')总是!= 0,所以您执行putchar('4'),然后对其中的putchar('3)进行操作,然后条件检查putchar ('2'),它总是真的,然后进入这个循环的开头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45082725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档