以printf为参数的For循环

时间:2018-09-11 07:51:25

标签: c for-loop printf-debugging

我不明白为什么下面的代码输出10。 我了解的是!printf("0")的意思是!0,即TRUE。那么,为什么代码不显示"Sachin"

#include <stdio.h>

int main() {
    for (printf("1"); !printf("0"); printf("2"))
        printf("Sachin");
    return 0;
}

输出

10

3 个答案:

答案 0 :(得分:9)

让我们分析这个副作用循环语句:

for(printf("1"); !printf("0"); printf("2"))
  • 始终(初始条件)执行第一条语句,即1
  • 然后测试条件:!printf("0")打印0,然后由于printf返回1,因为它仅打印1个字符,否定返回0并且循环永远不会因为该条件从一开始就为假,所以输入。因此,2Sachin均未打印。

当然,此代码不实用,几乎不可读。因此,永远不要做这样的事情(例如puts("10");是一个很好的选择)。

有关printf返回值的更多信息(通常被忽略):

  

成功返回后,这些函数将返回打印的字符数(不包括用于结束输出到字符串的空字节)。

(来自https://linux.die.net/man/3/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作为输出。