给出以下代码:
// 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)
是什么意思?
答案 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 表达;它的评估与之间存在一个序列点 正确的操作数。然后评估右操作数;结果 有它的类型和价值。