我可以在 C 中使用三元运算符为字符串赋值吗?

标签 c string initialization ternary-operator

我需要将字符串分配给a,然后使用%s打印它。如果我运行以下代码,我会收到一条错误消息:Invalid Initializer。有没有一种方法可以在不使用 switch/caseif/else 的情况下正确执行此操作?

char a[25] = ((ws < 1) ? "Calm" : 
              (ws >= 1) && ws < 4) ? "Light Air" :
              (ws >= 4 && ws <= 27) ? "Breeze" :
              (ws >= 28 && ws <= 47) ? "Gale": 
              (ws >= 48 && ws <= 63) ? "Storm" : "Hurricane");

最佳答案

“我需要将字符串分配给 a,然后使用 %s 打印它。”

您不是在进行赋值,而是在进行初始化。不,您不能使用表达式来初始化整个数组,这是由于不幸的遗留原因。

此外,数组甚至不可分配。不,这是不可能的。但是,由于您只需要使用 "%s" 打印它,因此您可以使用char指针

char *a = ((ws < 1) ? "Calm" : 
           (ws >= 1) && ws < 4) ? "Light Air" :
           (ws >= 4 && ws <= 27) ? "Breeze" :
           (ws >= 28 && ws <= 47) ? "Gale": 
           (ws >= 48 && ws <= 63) ? "Storm" : "Hurricane");

printf("Wind level: %s\n", a);

关于我可以在 C 中使用三元运算符为字符串赋值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51595840/

相关文章:

Crc ccitt (0x1d0f) 在 C 中计算

java - 为什么 Integer.parseInt 在没有 try catch 的情况下进行编译?

javascript - 在较大的字符串中查找包含给定字母集的最小子字符串

c - 在C中初始化字符串指针有什么意义

c++ - 在调用 main() 之前处理需要互斥锁的 C++ 初始化和多线程感知函数?

c - C 中的 pthread_create 参数

c - 为什么 libmill 每秒的协程和上下文切换数量有限?

python - 如何在python中的数组元素中找到特定的字符串

java - 如何初始化 JRockit MBean 树

c - 操纵杆程序未运行(未打印值)