You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:50:51