3

Я новичок в C и имеющие следующую проблемой при компиляции простого кода:Getting ошибка «именующий требуются в качестве левого операнда назначения»

#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 

I не может этого понять. Что я делаю не так?

ответ

7

Этот оператор

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

эквивалентно

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

Используйте вместо

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

спасибо. решает мою проблему. –

+0

@EmZoStark Нет вообще. :) –

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

Попробуйте это! :-)

2

Вы должны назначить за пределами тройного оператора, а не внутри него, так как тройной оператор связывает сильнее, чем назначение. Таким образом, вы должны написать

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

То, что вы написали равно

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

В этом коде Rvalue в настоящее время назначен. Это та же ошибка, как написание

myfunc() = 16; 

Cosmetic Примечание: В этом случае лучше использовать, если другое заявление вместо условного оператора, потому что это более ясно.

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

?: Является тройным оператором.
тройной оператор имеет более высокий приоритет, чем оператор '='.
так девятую строки кода работы, как это ..

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

вы должны использовать скобки или изменить предложение.
вы можете заменить 9-ю строчку с любой из следующей строки ..

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

    a = i == 3 ? 4 : 10; 
0

Тройная оператор не работает, как это. Вы должны использовать скобки, чтобы придать приоритет оператору равенства. Проверьте приоритет приоритета. По умолчанию операторы равенства имеют наименьший приоритет.

Смежные вопросы