while循环有两个参数吗?

6

我的老师让我解答一个问题,预测以下代码的输出。

#include <stdio.h>
int main()
{
    int i = 0, j = 0;
    printf("Output is : ");
    while (i < 5, j < 10)    // Doubt: how does while accept 2 arguments?? and how it works??
    {
        i++;
        j++;
    }
    printf("%d, %d\n", i, j);
}

我原本以为是语法错误,但当我尝试运行时,却输出了结果。

Output is : 10, 10

但是怎么做呢?有人可以解释一下吗?

但如果我删除第一个printf语句printf("Output is : ");并运行它,我的杀毒软件会给我一个警报,说检测到了一个Trojan。 但是它是如何成为一个Trojan的呢?


9
逗号运算符如何工作?逗号运算符可以在一行代码中使用多个表达式,将它们用逗号分隔开来。它们的值是最后一个表达式的值。这意味着你可以在不增加代码行数的情况下执行多个操作。例如,以下代码会将变量x的值设置为1,然后将变量y的值设置为2,并返回y的值:int x = 1, y = 2; y, x = y + 1, x + 1; // x is still 1, y is now 3 - quantdev
1
要解释这个,你必须了解逗号运算符的工作原理。如果你执行以下代码:x = m,n; // 它将取得m的值如果你执行以下代码:x = (m,n); // 由于括号的存在,它将取得n的值 - Nihar
1
"while(i<5,j<10)" 的意思是先执行 "i<5",然后执行 "j<10"。逗号运算符分隔的表达式的总体结果是最右边表达式的值。因此,该行变成了 "while(j<10)"。"i<5" 在这里是无用的。 - skrtbhtngr
如果我删除 printf 语句并运行它,我的杀毒软件会弹出警报,检测到了一个 特洛伊木马 - Shreyash S Sarnayak
3
那可能只是反病毒软件启发式算法有缺陷,与实际情况无关。 - Matteo Italia
https://dev59.com/snNA5IYBdhLWcg3wAIpP#1136117 - Kumar
1个回答

6
逗号运算符是一种二元运算符,它会评估其第一个操作数并丢弃结果,然后评估第二个操作数并返回该值。因此,在您的情况下,
First it will increment i and j upto 5 and discard.
Second it will iterate i and i upto 10 and provide you the result as 10, 10.

您可以使用以下代码进行确认:
while (i < 5, j < 10)    // Doubt: how does while accept 2 arguments?? and how it works??
{
    i++;
    j+ = 2;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接