出现错误:“需要左值作为赋值运算符的左操作数”

3

我是C语言的新手,编译一个简单代码时遇到了以下问题:

#include <stdio.h>

int main()
{
    int i, a, b;
    i = 3;
    a = b = 0;

    printf("Before: ");
    printf("%d %d\n", a, b);
    i == 3 ? a = 4 : a = 10; /* Line 9 */

    printf("After: ");
    printf("%d %d\n", a, b);
    return 0;
}

产生错误:
#gcc some.c
In function ‘main’:
some.c:9: error: lvalue required as left operand of assignment

我不理解它。我做错了什么吗?

6个回答

7
这个操作符
i==3 ? a=4 : a = 10;

等同于

( i==3 ? a=4 : a ) = 10;

使用替代方案

i==3 ? a=4 : ( a = 10 );

@EmZoStark 没有啊,一点都不。:) - Vlad from Moscow

2
a = (i == 3 ? 4 : 10);

Try this! :-)


2
你需要在三元运算符外部进行赋值,而不是在内部进行赋值,因为三元运算符的绑定比赋值更紧密。因此,你应该写成:
a = ((i == 3) ? 4 : 10);

你所写的等同于
(i == 3 ? a = 4 : a ) = 10;

在这段代码中,正在对rvalue进行赋值。这与编写以下内容相同的错误:

myfunc() = 16;

注释:在这种情况下,最好使用if else语句而不是条件运算符,因为这里更清晰。

if (i == 3)
    a = 4;
else
    a = 10;

2

?:是一个三元运算符。
三元运算符的优先级高于'='运算符。
因此,您代码的第9行像这样工作。

    (i == 3 ? a = 4 : a) = 10;

您需要使用括号或修改您的句子。
您可以使用以下任一行替换您的第九行。

    i == 3 ? a = 4 : (a = 10);

    a = i == 3 ? 4 : 10;

1

试试这个

if (i==3) a = 4; else a = 10;

0
三元运算符不是这样使用的。你应该使用括号来给等式运算符更高的优先级。检查优先级顺序。默认情况下,等式运算符的优先级最低。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接