赋值中的左值无效

时间:2016-01-10 15:01:33

标签: c integer lvalue

此代码是数组中整数的交换。数组的总大小为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();
}

3 个答案:

答案 0 :(得分:4)

两个问题:

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的第一部分是作业。你不想在这里使用&&。与第三部分类似。

您在分配中获得&#34;无效左值的原因&#34;错误与操作顺序有关。 &&的优先级高于=。所以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

答案 1 :(得分:1)

您正在将Ii混在一起。 C是一种区分大小写的语言。

另外:更改for条件(使用,代替&&),如下所示:

for(i=0, n=99; i<51 && n>50; i++, n--)

main()应返回void的int insead。

结果代码应为:

int main()
{
    int a[110],i,n,temp;
    printf("\n enter the values:\n");
    for(i=0;i<100;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0, n=99; i<51 && n>50; i++, n--)
    {
        temp=a[i];
        a[i]=a[n];
        a[n]=temp;
        printf("\n the values are %d and %d ", a[i],a[n]);
    }
    getch();
    return 0;
}

答案 2 :(得分:1)

首先,你应该在这里使用小写I

 for(inti=0;i<100;i++)
{
   scanf("%d",&a[I]);
}

您应该在以下for循环中放置逗号,,而不是&&

for(int i = 0,n = 99; i < 51 && n > 50; i++ , n--)