значение lvalue требуется как левый операнд ошибки присваивания в c

#c #lvalue

#c #значение lvalue

Вопрос:

Я должен написать программу, которая сравнивает 3 целых числа. Я не понимаю, почему я не могу присвоить переменную a переменным min или max.

 #include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c, max, notmax;
    printf("enter first integern");
    scanf("%d", amp;a);
    printf("enter second integern");
    scanf("%d", amp;b);
    printf("enter third integern");
    scanf("%d", amp;c);
    a > b ? a = max : a = notmax ;
return 0;
}
  

Комментарии:

1. Пожалуйста, предоставьте весь вывод ошибки.

Ответ №1:

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

 a > b ? a = max : a = notmax ; 
  

рассматривается как:

(( a > b ? a = max : a) = notmax );

но как только вы используете скобки в соответствующем месте, как показано ниже, все работает нормально:

 a > b ? a = max : (a = notmax) ;
  

или, может быть, что-то вроде:

(a > b ? (a = max) : (a = notmax)) ;

который должен устанавливать приоритет так, как вы этого хотите. Использование скобок очень поможет в оценке составных операторов.

Ответ №2:

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

?: Оператор вычисляет либо значение второй, либо значение третьей части. Таким образом, его можно использовать для выбора max или notmax и присвоения ему a .

 a = a > b ? max : notmax;
  

Однако в вашем коде все еще есть проблема, потому max что и notmax не были инициализированы, поэтому их значения неопределенны, и их чтение может привести к неопределенному поведению. Перед запуском этого состояния вам необходимо убедиться, что обеим этим переменным присвоено значение.