这段 C 代码会打印什么?
for(printf(“1”);!printf(“0”);printf(“2”))
printf(“Sanchin”);
return 0;
我原以为这段代码会导致无限循环,但没有打印任何内容。 这段代码的结果应该是无限循环、1202Sanchin、10、0 甚至 1?
for 循环可能会令人困惑,但将代码重写为 while 循环:
printf("1");
while(!printf("0")) {
printf("Sanchin");
printf("2");
}
return 0;
那就看手册
printf()
的返回值是多少:
成功返回后,这些函数返回的数量 打印的字符(不包括用于结束输出的空字节 字符串)。
因此,根据您的
stdout
的情况,它可能会打印:
stdout
已关闭)RLIMIT_FSIZE
设置为 1)stdout
没有限制)。printf
返回写入输出流的字符数(如果出现错误,则返回负值);成功时,printf("1")
、printf("0")
和 printf("2")
中的每一个都会返回 1
。 因此,您应该看到以下行为:
printf("1")
被执行,其返回值被丢弃。 1
写入输出流。
printf("0")
被执行,其返回值(1
)是逻辑!
运算符的操作数。 0
被写入输出流。 由于 !1
相当于 0
(false),因此循环立即退出而不执行循环体。 这意味着 printf( "Sanchin" )
和 printf( "2" )
都不会被执行。
您没有得到任何输出,因为标准输出通常是行缓冲 - 在以下任一情况之前不会打印任何内容:
'\n'
) 被写入流中;或者,fflush( stdout )
要查看输出,请将代码更改为:
for (printf("1"); !printf("0"); printf("2"))
printf("Sanchin");
putchar( '\n' );
return 0;
输出将为
10
。
您应该提供一个完整的示例来显示问题,而不是一段代码,如下所示:
for(printf(“1”);!printf(“0”);printf(“2”))
printf(“Sanchin”);
return 0;
几乎等同于以下内容:
printf("1");
while (!printf("0")) {
printf("Sanchin");
printf("2");
}
return 0; /* return 0 is something that needs more context
* to know what will happen next */
如您所见,这至少应该打印没有行尾的字符串
1
。 接下来是循环的测试,解释如下:Printf()
返回打印的字符数,假设没有错误,printf将返回值1,经过运算符!
逻辑非后,结果为一个 false 布尔值,这意味着循环体不被执行,所以只打印一个没有行尾的 1
。
您没有观察到任何内容的原因可能是多种原因之一,具体取决于您执行程序的环境,但最可能的原因是您的系统提示符在程序终止时覆盖了它。 改变一下就好了
printf("1");
由
printf("1\n"); /* add a line end to the output */
很可能你会看到单曲
1
出来。
我们知道 printf 语句返回字符数 printf("1") return 1 然后我们进入条件语句 printf("0") 返回 1 但这里的语句是 (!printf("0")) !1=0 条件为假,我们退出 for 循环