[英]Calling scanf() gives error “ISO C++ forbids cast to non-reference type used as lvalue”
我有以下代码:
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
你能解释出什么问题了吗?
scanf("%i",*array++);
那条线毫无意义。 您可能的意思是:
scanf("%i", &array[i]);
首先,
数组名称不是可修改的左值,因此对它们进行增量操作是非法的。 所以你最好改变一下
scanf("%i",*array++);
至
scanf("%i", &array[i]);
scanf
使用变量的地址来分配值,因此在这种情况下至少需要使用&
。
有用的建议-在代码中使用适当的缩进,并在令牌之间放置空格,乍一看似乎并不重要,但它使阅读您的代码的人和IMHO的头疼程度降低了,不是吗?
您在此行中有2个主要错误。
运算符++
修改操作数。 这里的操作数是array
,它是array
的不可修改地址。 因此,编译器错误。
第二个错误与scanf
的用法有关。 scanf
需要一个用于存储数据的地址 。
要克服这些错误,您应该使用scanf("%i", &array[i]);
或(如果出于某种原因想要更接近原始语法) scanf("%i", arrayPtr++);
其中arrayPtr
初始化为&array[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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.