我不明白为什么下面的代码输出10
。
我了解的是!printf("0")
的意思是!0
,即TRUE
。那么,为什么代码不显示"Sachin"
#include <stdio.h>
int main() {
for (printf("1"); !printf("0"); printf("2"))
printf("Sachin");
return 0;
}
输出
10
答案 0 :(得分:9)
让我们分析这个副作用循环语句:
for(printf("1"); !printf("0"); printf("2"))
1
!printf("0")
打印0
,然后由于printf
返回1,因为它仅打印1个字符,否定返回0
并且循环永远不会因为该条件从一开始就为假,所以输入。因此,2
或Sachin
均未打印。当然,此代码不实用,几乎不可读。因此,永远不要做这样的事情(例如puts("10");
是一个很好的选择)。
有关printf
返回值的更多信息(通常被忽略):
成功返回后,这些函数将返回打印的字符数(不包括用于结束输出到字符串的空字节)。
答案 1 :(得分:3)
如果您查看Google上的man printf参考,您会发现此函数返回写入的字节数。
这里的条件是For i = 4 To ws.Range("C" & Rows.Count).End(xlUp).Row
ws.Cells(i, 4).Value = OurFees(Range("C" & i))
Next i
,换句话说:“只要不存在printf的返回(或等于0),就可以做一些事情。但是您打印字符'0',所以printf实际上返回了1所以你的条件是假的。
现在为什么要打印10:
!printf("0")
打印1。printf("1")
会发生一次(打印0)答案 2 :(得分:0)
printf("1")
打印1,它返回的字符数为1
printf("0")
打印0并返回1个字符
!1表示!(true)= false ,因此执行将停止,您将看到10作为输出。