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

C语言三目运算符报错‘lvalue required as left operand of assignment’求解

解决三目运算符赋值错误并实现正确的时间差计算

首先来说你遇到的「lvalue required as left operand of assignment」错误——这是因为你搞反了三目运算符和赋值的顺序!

三目运算符condition ? expr1 : expr2的返回值是一个右值(比如gap/100是计算出来的具体数值,它不能被赋值),而赋值操作x = y要求左边必须是左值(也就是可以被赋值的变量,比如hour)。你写的gap > 0 ? gap/100 = hour : ...相当于给一个数值赋值,这在C里是不允许的,就像你不能写5 = hour一样。

正确的写法应该是把变量放在赋值的左边,用三目运算符的结果给它赋值,也就是你最开始写的那种形式:

hour = gap > 0 ? gap/100 : (2400 - gap)/100;

另外,你的代码还有几个小问题需要修正,同时我们可以优化时间计算的逻辑,让代码更简洁:

修正并优化后的完整代码

#include <stdio.h>

int main() {
    int time1, time2, gap;
    int hour, minute;
    
    // 关闭输出缓冲,确保提示信息即时显示
    setvbuf(stdout, NULL, _IONBF, 0);
    
    printf("Enter first time: \n");
    scanf("%d", &time1);
    printf("Enter second time: \n");
    scanf("%d", &time2);
    
    gap = time2 - time1;
    // 统一处理跨天的情况,把gap转为正的有效差值
    gap = gap > 0 ? gap : 2400 + gap;
    
    hour = gap / 100;
    minute = gap % 100;
    
    printf("The gap of these times: %d hours, %d minutes\n", hour, minute);
    
    return 0;
}

优化说明

  • 统一差值处理:先把gap转换为正的有效时间差(如果gap为负,说明时间跨天,直接加上2400即可),这样后面计算小时和分钟时不用重复判断,代码更清晰。
  • 修正拼写错误:把最后一行的print改为标准的printf,同时添加换行符让输出格式更规范。
  • 冗余代码清理:去掉了重复调用的setvbuf,只保留一次即可。
  • 符合C标准:添加了return 0;,让main函数的写法更规范。

测试你的示例场景

  • 输入1925和2358:gap=433,计算得4小时33分钟,符合预期。
  • 输入1540和1630:gap=90,计算得0小时50分钟,符合预期。
  • 输入0730和0720:gap=-10,转换为2390,计算得23小时50分钟,符合预期。

内容的提问来源于stack exchange,提问作者roku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:42:14