while(scanf(“%d”,& n),n)是什么意思?

时间:2017-03-07 01:32:38

标签: c while-loop operators conditional-statements onlinejudge

给出以下代码:

// this is a solution of uva 12279    
#include<stdio.h>

int main()
{
    int arr[10000],i,n,a,d=0,e=75;
    while(scanf("%d",&n),n)// what's that means?
    {
        d++;
        int c=0,b=0;

        if(n==0)
            return 0;

        for(i=0;i<n;i++)
            scanf("%d",&arr[i]);

        for(i=0;i<n;i++)//this is for loop
        {
            if(arr[i]==0)
                c++;
            else
                b++;
        }
        a=b-c;

       printf("Case %d: %d\n",d,a);
  }
  return 0;
}

while(scanf("%d",&n),n)是什么意思?

1 个答案:

答案 0 :(得分:5)

在这种情况下

while(scanf("%d",&n),n)

使用了所谓的逗号运算符。

scanf("%d",&n),n

条件的值是变量n的逗号运算符的第二个操作数的值。如果n不等于0,则执行循环。

你可以通过以下方式想象它

start: scanf("%d",&n);
if ( n != 0 )
{
    //...
    goto start;
}

因此,在循环体内,变量n不能等于0,除非重新分配。结果是来自所呈现的代码片段的声明

if(n==0)
return 0;

没有意义。

以下列方式编写循环条件更为正确

while ( scanf("%d",&n) == 1 && n != 0 )

来自C标准(6.5.17逗号操作员)

  

2逗号运算符的左操作数被计算为void   表达;它的评估与之间存在一个序列点   正确的操作数。然后评估右操作数;结果   有它的类型和价值。