带putchar的整数提升

带putchar的整数提升,c,for-loop,putchar,C,For Loop,Putchar,函数将写入的无符号字符转换为int或EOF,返回错误:。 为了练习,我制作了这个节目: #include<stdio.h> int main(void){ for(putchar('1'); putchar('2'); putchar('3')) putchar('4'); return 0; } 它会产生一个输出为…432432…的无限循环。。。。 我不明白这样一个结果背后的原因。我希望循环反复打印相同的数字。我指的是putchar'4'的值,其中字符'4'应提

函数将写入的无符号字符转换为int或EOF,返回错误:。 为了练习,我制作了这个节目:

#include<stdio.h>

int main(void){
  for(putchar('1'); putchar('2'); putchar('3'))
    putchar('4');
  return 0;
}
它会产生一个输出为…432432…的无限循环。。。。
我不明白这样一个结果背后的原因。我希望循环反复打印相同的数字。我指的是putchar'4'的值,其中字符'4'应提升为int 52。为什么这样的促销行为不像我预期的那样?

因为putchar'2'总是0,然后执行putchar'4',然后执行putchar'3中的操作,然后检查putchar'2',该值始终为真,然后转到此循环的开头,因为putchar'2'始终为0,然后执行putchar'4',然后执行putchar'3中的操作,然后检查putchar'2',该条件始终为真,然后根据循环策略转到本循环的开头

putchar'1'执行一次。 putchar'2'被评估,被发现是真实的,putchar'4';执行,然后putchar'3';被执行。 返回到上一步,除非putchar'2'是FALSY,否则这永远不会发生。 因此无限循环,每个循环迭代包含三个putchar语句。 与问题相关……其中字符“4”应提升为int 52,引用C11,§7.21.7,强调

fputc函数将c指定的字符转换为无符号字符 char到流[…]指向的输出流

putchar函数等价于具有第二个参数stdout的putc


因此,将打印的是字符表示,“4”的字符表示是4。

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

putchar'1'执行一次。 putchar'2'被评估,被发现是真实的,putchar'4';执行,然后putchar'3';被执行。 返回到上一步,除非putchar'2'是FALSY,否则这永远不会发生。 因此无限循环,每个循环迭代包含三个putchar语句。 与问题相关……其中字符“4”应提升为int 52,引用C11,§7.21.7,强调

fputc函数将c指定的字符转换为无符号字符 char到流[…]指向的输出流

putchar函数等价于具有第二个参数stdout的putc

所以,它是将被打印的字符表示,“4”的字符表示是,嗯,4。

它确实打印124324…因为putchar1在循环开始时执行,不会再次执行

Putchar在标准输出上打印字符,并返回转换为int的相同字符。它不会将转换为int的字符打印到标准输出。如果你说:putchar'z',它会打印'z'

在每次迭代开始时输入字符2,并返回字符“2”的int值,该值恰好为非零。这也意味着循环永远不会结束

putchar'3'在每次迭代结束时执行

在每次迭代的开始和结束之间输入putchar'4'。 这就是您获得该输出的原因。

它确实打印124324…因为putchar1在循环开始时执行,并且不再执行

Putchar在标准输出上打印字符,并返回转换为int的相同字符。它不会将转换为int的字符打印到标准输出。如果你说:putchar'z',它会打印'z'

在每次迭代开始时输入字符2,并返回字符“2”的int值,该值恰好为非零。这也意味着循环永远不会结束

putchar'3'在每次迭代结束时执行

在每次迭代的开始和结束之间输入putchar'4'。
这就是为什么你会得到这个输出。

put…char…这个名字是什么意思?那为什么不输入呢?什么??带有奇怪期望的奇怪测试。put_char写入ascii字符,而不是十进制的ascii代码。@SouravGhosh我同意。我正在寻找我的嫌疑犯的确证。简单地搜索putchar的规范太复杂了,无法确认你的嫌疑犯?put…char…这个名字是什么意思?那为什么不输入呢?什么??带有奇怪期望的奇怪测试。put_char写入ascii字符,而不是十进制的ascii代码。@SouravGhosh我同意。我正在寻找我的嫌疑犯的确认。简单搜索putchar的规范太复杂了,无法确认你的嫌疑犯?我的错误一直认为只有putchar'4'应该打印结果。感谢您对如此不寻常的循环进行如此精彩的解释!我的错误是认为只有putchar'4'应该打印结果。感谢您对如此不寻常的循环进行如此精彩的解释!