繁体   English   中英

(赋值中无效的左值)我运行它时会发生此错误。这是什么意思?

[英](invalid lvalue in assignment) this error happens when i run it.what does it mean?

这是代码,编译器说第7行存在某些错误。

include<stdio.h>
main()
{
char m;
 int a,b,n=0;
scanf("%c%d%d",&m,&a,&b);
m=='A' || m=='B' || m=='C' ? n=(3*a)+(5*b) : n=(5*a)+(3*b);
printf("%d\n",n);
}

改用

m=='A' || m=='B' || m=='C' ? n=(3*a)+(5*b) : ( n=(5*a)+(3*b));

否则,语句看起来像

( m=='A' || m=='B' || m=='C' ? n=(3*a)+(5*b) : n)=(5*a)+(3*b);

或者你可以写

n = m=='A' || m=='B' || m=='C' ? (3*a)+(5*b) : (5*a)+(3*b);

C中的条件运算符通过以下方式定义

conditional-expression:
    logical-OR-expression
    logical-OR-expression ? expression : conditional-expression

由于赋值运算符的优先级较低,因此编译器将发出错误,因为该赋值已从第三个操作数的条件运算符中排除

您使用的表达式在C ++中将是有效的,因为在C ++中,运算符的定义不同

conditional-expression:
    logical-or-expression
    logical-or-expression ? expression : assignment-expression
                                         ^^^^^^^^^^^^^^^^^^^^^

无需使用会使所有人(包括编译器)困惑的复杂语句。 这同样有效,而且更容易阅读:

if (m=='A' || m=='B' || m=='C')
   n=(3*a)+(5*b);
else
   n=(5*a)+(3*b);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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