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
相关产品推荐
相关产品推荐

