此代码是数组中整数的交换。数组的总大小为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();
}
答案 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)
您正在将I
与i
混在一起。 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--)