这段代码是数组中整数的交换。数组的总大小为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

10-04 20:20