#include <stdio.h>
int main() {
int a, b, c, y;
printf("Введите число a: ");
scanf("%d", &a);
printf("Введите число b: ");
scanf("%d", &b);
printf("Введите число c: ");
scanf("%d", &c);
a > b ? (a > c ? y = a : y = c) : (b > c ? y = b : y = c);
printf("Наибольшее число: %d\n", y);
return 0;
}
给出错误。我不明白这是什么错误。

由于三元运算符使用不正确而导致错误。正确的用法涉及使用表达式而不是执行操作。
这是什么意思?如果要执行赋值操作,需要使用如下结构:
如果我们将其应用到您的示例中,我们会得到以下条目:
这是一个详细的使用示例。更紧凑:
表达
由于语言规则定义的操作顺序,编译器将其读取为
重要的是要指出,这是一种表达,而不是像其他一些语言那样是一种指令。在 C 语言中,它不能出现在赋值运算符的左边。
它可以按照与嵌套三元运算相同的方式编写:
但这是不必要的,除非我们想做类似的事情
a > c ? (y = a, z = c) : (y = c, z = a)。然后最好使用if,如果它不是一些非常令人困惑的代码(其中所有内容都写在一个嵌套的)的话for()。因为它是一个表达式,所以它可以位于赋值的右边:调试时,最好使用易于阅读的格式。
好吧,一般来说,上面已经给出了答案:在三元运算符(?:)中使用了赋值运算(y = a),这是三元表达式的右边部分。三元运算符内部必须有一个可以赋值的值,而不是赋值表达式。