“错误:'=':左操作数必须是l值”? (在三元组中使用作业时?:)

时间:2011-12-11 09:57:15

标签: c++ c

我必须有语法问题,但我无法理解这意味着什么 - 我用Google搜索,但我不明白这个问题的原因。请告诉我函数语法

有什么问题

这是错误行:

else sequence= (Bnum < Anum) ? sequence=Bnum : sequence=Anum;

这是功能

int reduction(int Knum)
{
    int sequence=8, Anum=0, Bnum=0;

    printf("enter a sequence,to stop print (-1)\n");
    while(sequence!=-1)
    {
        Anum = sequence;
        scanf("%d",&sequence);
        Bnum = sequence;
        if (Anum+Bnum<8)
            return 1;
        else
            sequence= (Bnum < Anum) ? sequence=Bnum : sequence=Anum;
    }
    return 0;
}

5 个答案:

答案 0 :(得分:7)

以下

sequence= (Bnum < Anum) ? sequence=Bnum : sequence=Anum ;

应写成:

sequence= (Bnum < Anum) ? Bnum : Anum ;

观察C和C ++之间的差异

我确定您将代码编译为C程序,而不是C++程序,因为在C ++中您编写的内容会导致编译错误,虽然它在C中是一个错误。这是C和C ++不同的一个例子!

关于错误的解释,请在此处阅读我的帖子:

答案 1 :(得分:5)

else sequence = (Bnum < Anum) ? Bnum : Anum;

您不需要?:运算符中的额外赋值。

答案 2 :(得分:4)

您需要了解?:=运算符的优先级。你希望

sequence = (Bnum < Anum) ? sequence=Bnum : sequence=Anum;

(即使因为太多同时分配到序列的原因,这是错误的)被解析为

sequence = (Bnum < Anum) ? (sequence=Bnum) : (sequence=Anum);

但是语言规则(在C中)是如果你想要解析,你必须自己使用括号。如果没有明确的括号,运算符的优先级意味着表达式等同于

sequence = ((Bnum < Anum) ? (sequence=Bnum) : sequence) = Anum;

在C中没有意义,因此语法错误。

但更重要的是,您需要考虑要存储到sequence中的值。为什么sequence = ...在此声明中出现过多次?另请参阅my answer to this question

答案 3 :(得分:3)

您应该只分配一次sequence

else {
    sequence = (Bnum < Anum) ? Bnum : Anum ;
}

在C ++中,你也可以在这里使用min

答案 4 :(得分:1)

在C#中,语法为sequence = (BNum < ANum) ? BNum : Anum,其内容如下:

if (BNum < ANum)
{
    sequence = BNum;
}
else
{
    sequence = ANum;
}