-1

我有这个代码:

int* read(){
int i,num,array[11];
printf("enter a integer value between 1 & 10: ");
scanf("%i",&num);
while(!(num>0&&num<11)){
read() ;
}

if(num>0&&num<11){
printf("enter %i integers now: ",num);
for(i=0;i<num;i++)
scanf("%i",*array++);//LINE 19 is here..........

*array=0;
}
return array;
}

当我尝试调用此函数时,它显示以下编译器错误:

[Error] C:\Users\seeker-PC\Documents\C-Free\Projects\n\Untitled12.cpp:19: error: ISO C++ forbids cast to non-reference type used as lvalue
[Error] C:\Users\seeker-PC\Documents\C-Free\Projects\n\Untitled12.cpp:19: error: non-lvalue in assignment

你能解释一下出了什么问题吗?

4

4 回答 4

2
scanf("%i",*array++);

那条线没有什么意义。你可能的意思是:

scanf("%i", &array[i]);
于 2013-09-03T17:26:28.710 回答
2

首先,

数组名称不是可修改的左值,因此对它们进行增量操作是非法的。所以你最好改变

scanf("%i",*array++);

scanf("%i", &array[i]);

scanf获取变量的地址以分配值,因此在这种情况下使用&至少在这种情况下是必要的。

有用的建议 -在您的代码中使用适当的缩进,并请在标记之间放置空格,起初这似乎并不重要,但它让阅读您的代码的人不那么头疼,恕我直言,您肯定会为他人编写代码,不是吗?

于 2013-09-03T18:00:35.347 回答
2

您在这一行中有 2 个主要错误。

运算符++修改操作数。这里的操作数是array,它是一个数组的不可修改的地址。因此编译器错误。

第二个错误与scanf. scanf需要一个地址来存储数据。

要克服这些错误,您应该使用scanf("%i", &array[i]);或(如果您出于某种原因想要更接近原始语法) - scanf("%i", arrayPtr++);wherearrayPtr被初始化为&array[0].

于 2013-09-03T18:04:48.117 回答
0

用这个。刚刚包含 main() 函数以使其可运行。

#include <stdio.h>
int* read(){
int i,num,array[11];
printf("enter a integer value between 1 & 10: ");
scanf("%d",&num);
while(!(num>0&&num<11)){
read() ;
}

if(num>0&&num<11){
printf("enter %i integers now: ",num);
for(i=0;i<num;i++)
scanf("%d",&array[i]);//LINE 12 is here..........

*array=0;
}
return array;
}
int main()
{
    return 0;
}
于 2013-09-03T17:56:46.293 回答