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

C语言三元表达式中数组类型表达式赋值失败原因及代码错误排查

C语言程序错误分析

1. 三元运算中数组赋值失败的原因

C语言标准明确规定:数组名属于不可修改的左值,绝大多数场景下会自动转换为指向数组首元素的指针常量,常量不能出现在赋值运算符的左侧。
你代码中三元运算的返回值是strcpy的返回值,类型为char *(指向目标数组首地址的指针),尝试将这个指针赋值给数组名c,属于语法错误,必然编译失败。
另外这段代码的赋值操作本身完全多余:三元运算分支中调用的strcpy已经完成了向c数组写入字符串的操作,根本不需要额外接收返回值再赋值。

2. 程序的逻辑错误

你使用的60<=temp<80这类区间判断写法在C语言中完全不生效:
C语言的关系运算符是左结合的,60<=temp<80会被解析为(60<=temp) < 80:先判断60<=temp,结果为真时值为1,为假时值为0,再用0或1和80比较,最终这个表达式永远为真,完全达不到区间判断的效果。
正确的区间判断需要用逻辑与运算符连接两个判断条件,写法为60<=temp && temp<80。

修正后的代码

#include<stdio.h>
#include<string.h>

int main()
{
    float temp;
    char c[15]; 
    
    printf("Enter temperature in F degree=");
    scanf("%f",&temp);
    
    // 去掉多余的数组赋值,修正区间判断逻辑
    temp>=80    ? strcpy(c,"swimming"):
    (60<=temp && temp<80 ? strcpy(c,"tennis"):
    (40<=temp && temp<60 ? strcpy(c,"Golf"):
                   strcpy(c,"skiing 1.")));    
    
    printf("%s",c);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:12:01