这段代码是数组中整数的交换。数组的总大小为100。编译时,出现错误,指出“赋值中无效的左值”。我究竟做错了什么?
#include<stdio.h>
#include<conio.h>
void main()
{
int a[110],I,n,temp;
printf("\n enter the values");
for(I=0;i<100;i++)
{
scanf("%d",&a[I]);
}
for(I=0&&n=99;I<51&&n>50;I++&&n--) #here is the error
{
temp=a[I];
a[I]=a[n];
a[n]=temp;
printf("\n the values are %d and %d ", a[I],a[n]);
}
getch();
}
最佳答案
两个问题:
for(I=0;i<100;i++)
未声明变量
i
。您可能需要I
代替:for(I=0;I<100;I++)
接下来是这里:
for(I=0&&n=99;I<51&&n>50;I++&&n--)
for
的第一部分是赋值。您不想在这里使用&&
。与第三部分类似。您收到“分配中无效的左值”错误的原因与操作顺序有关。
&&
的优先级高于=
。因此for
的第一部分看起来像是带有隐式括号的:I=(0&&n)=99
表达式
0&&n
不是有效的左值,但位于赋值的左侧,因此这就是为什么会出现错误的原因。在
for
的第三部分中,第一次迭代时I
为0,因此第一次I++
运行I
变为1,但表达式的计算结果为0,因此&&
运算符可防止n--
从运行。在
for
的第一部分和第三部分中,请改为使用逗号运算符,并在第二部分中添加括号以清楚显示:for(I=0,n=99;(I<51)&&(n>50);I++,n--)
同样,
main
应该始终返回int
,而不是void
。