#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
не были инициализированы, поэтому их значения неопределенны, и их чтение может привести к неопределенному поведению. Перед запуском этого состояния вам необходимо убедиться, что обеим этим переменным присвоено значение.