繁体   English   中英

调用scanf()会给出错误“ ISO C ++禁止将其强制转换为用作左值的非引用类型”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM