While循环的参数内部的逗号

时间:2019-02-24 12:12:30

标签: c while-loop

学习计算机科学决赛。

我真的无法弄清楚这个问题。

此C程序的输出是什么?

#include<stdio.h>
int main()
{
    int i = 0;
    while(i < 4, 5)
    {
        printf("Loop ");
        i++;
    }
    return 0;
}

A。无限循环

B。。Loop Loop Loop Loop Loop Loop

C。循环循环循环

D。什么都不打印

执行后,它会无限次地打印循环。为什么会这样呢?为什么While循环的参数内有逗号?它是做什么的?

2 个答案:

答案 0 :(得分:1)

while循环中的条件是comma operator,它会计算其操作数并产生其最右边操作数的值。

在您的情况下,它评估i < 4条件并丢弃它,然后将该条件评估为5。因此,它基本上等同于:

while(5)
{
    printf("Loop ");
    i++;
}

显然,这会导致无限循环,因为条件始终为真。 (请记住,任何非零值在C中始终为“ true”)。还有integer overflow可能是由于i在无限循环中递增。

答案 1 :(得分:1)

它将永远循环,因为while循环i < 4, 5的条件求值为5,它不同于0,因此在true中被视为C。 / p>

要了解更多信息,请阅读comma operatorhttps://en.wikipedia.org/wiki/Comma_operator

简而言之,当使用逗号运算符时,将评估其所有操作数,但整个表达式将取最后一个的值。例如:

int val = (1, 2, 3);
printf("%d\n", val);

将打印3