【问题标题】:Can I assign a value to a string using ternary operator in C?我可以在 C 中使用三元运算符为字符串赋值吗?
【发布时间】:2019-01-06 19:33:12
【问题描述】:

我需要将字符串分配给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");

【问题讨论】:

  • 没有。初始化器必须是一个常数。对于这个问题,您应该简化表达式。我建议您也为自己的代码做同样的事情。
  • 你为什么要写上面的代码呢?你有没有想过要维护这段代码的人?如果以后还要加一些条件呢?
  • 可维护的解决方案:使用头文件定义目标字符串,然后根据条件分配它们或strcpy()它们。
  • 您根本无法为字符串赋值。字符串是一个字符数组。您不能分配给数组。初始化不是赋值。您可以尝试使用指针:const char* a = ...
  • @EugeneSh。不,但原因不是初始化器必须是常量,因为它不必是。

标签: c string initialization ternary-operator


【解决方案1】:

"我需要将字符串分配给 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);

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 2012-02-14
    • 2016-08-22
    • 2011-01-13
    • 2021-11-23
    • 2013-06-28
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多