该函数应该比较两个整数并在屏幕上打印关系 尽管如此,三元运算符在语法上是正确的,并且已经在 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);
}
最佳答案
至于为什么你会收到错误,这是关于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 .
关于c - Eclipse-Photon 三元运算符编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51638911/