该函数应比较两个整数并在屏幕上打印关系 算法,三元运算符的语法正确,并且已经在Visual Studio IDE上运行,使用gcc编译时,eclipse出现了错误:
error: lvalue required as left operand of assignment
(x == y) ? c = 61 : (x > y) ? c = 62 : c = 60;
^
代码:
#include <stdio.h>
void _1_6(const int x, const int y)
{
char c = '\0';
(x == y) ? c = 61 : (x > y) ? c = 62 : c = 60;
printf("%d%c%d", x, c, y);
}
int main(void)
{
_1_6(1, 3);
}
答案 0 :(得分:1)
关于为什么出现错误,这是关于operator precedence的问题。
表达式实际上是((x == y) ? c = 61 : (x > y) ? c = 62 : c) = 60
。也就是说,您尝试将值60
分配给表达式(x == y) ? c = 61 : (x > y) ? c = 62 : c
,这是不可能的。
您需要自己添加一些括号,例如
(x == y) ? c = 61 : (x > y) ? c = 62 : (c = 60); // Note parentheses around last assignment
或将其返工为例如
c = (x == y ? '=' : x > y ? '>' : '<');
或者,这是我的建议,不要再使用混淆代码,而要使用简单易读的代码:
if (x == y)
c = '=';
else if (x > y)
c = '>';
else
c = '<';
还请注意使用实际字符值,而不是magic numbers。