使用putchar整数推广

时间:2017-07-13 13:52:36

标签: c for-loop putchar

该函数将写入无符号字符集的字符返回到错误”: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.为什么这样的促销不符合我的预期?

3 个答案:

答案 0 :(得分:4)

在您的情况下,根据循环政策,

  • putchar('1')执行一次。
  • 评估
  • putchar('2'),找到TRUTHY,执行putchar('4');,然后执行putchar('3');
  • 回到上一步,除非putchar('2')是FALSY(从未发生过)。
  • 因此无限循环,每次循环迭代都包含 三个 putchar语句。

与问题“....相关,其中字符'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')总是如此,你去了到这个循环的开头