在C语言中使用条件表达式?:报错,求问题原因及解决方法
问题分析与解决
你遇到的错误是运算符优先级导致的:条件运算符?:的优先级高于赋值运算符=,编译器会把你的代码解析成这样:
(a == 1 ? x = 't' : x) = 'f';
条件表达式的结果是一个右值(无法被赋值),你试图给这个右值赋值'f',自然会触发"expression must be a modifiable lvalue"或"'=': left operand must be l-value"的错误。
有两种修正方案:
- 方案一:给分支里的赋值表达式加括号,提升赋值运算的优先级,让编译器按你的预期执行:
a == 1 ? (x = 't') : (x = 'f');
- 方案二:更简洁规范的写法——直接将条件表达式的结果赋值给
x(这也是条件表达式的常规用法):
x = a == 1 ? 't' : 'f';
这里括号可省略,因为?:优先级低于=,但加上括号能提升可读性。
另外补充一个细节:标准C中main函数的返回类型应该是int,而非void,建议修正以符合标准。完整的修正代码如下:
#include <stdio.h> #include <stdlib.h> #pragma warning (disable : 4996) int main(void) { int a = 1; char x; x = a == 1 ? 't' : 'f'; putchar(x); system("pause"); return 0; }
内容的提问来源于stack exchange,提问作者fdhl
相关产品推荐
相关产品推荐

