【问题标题】:C format strings questionsC格式字符串问题
【发布时间】:2014-10-23 21:22:15
【问题描述】:

我仍在学习 C 并试图理解我在下面看到的一些内容:

printf("%s ", row[i] ? row[i] : "NULL");

显然,我知道printf%s 等。我没有完全掌握的是我应该寻找什么来理解? : 以及我的其他选择是什么。我不熟悉术语,所以我什至不确定这是“格式字符串”的一部分。我假设它返回row[i] 并继续返回row[i] 直到它达到NULL

非常感谢您提供澄清和指向正确方向的指示,以更好地学习和理解这一点。

【问题讨论】:

标签: c printf string-formatting ternary-operator


【解决方案1】:

它与字符串格式无关。它是一种称为三元运算的语法糖。它看起来像这样:<condition> ? <if_true> : <if_false>。 展开,就相当于这样:

if (row[i])
{
    result = row[i];
}
else
{
    result = "NULL";
}

printf("%s ", result);

【讨论】:

    【解决方案2】:

    这称为三元运算符。如果语句为<condition> ? <res1> : <res2>,则如果condition 被评估为真,则该语句被评估为res1,否则为res2

    【讨论】:

    • 三元,不是三元。它更准确地称为“条件运算符”;它被称为“三元运算符”只是因为它恰好是该语言中唯一需要三个操作数的运算符。
    【解决方案3】:

    ? 运算符称为conditional operator(或三元运算符)。它可以被认为是“内嵌条件语句”。您分享的代码相当于:

    if(row[i] != NULL) {
      printf("%s ", row[i]);
    } else {
      printf("%s ", "NULL");
    }
    

    条件运算符可以用作函数或赋值的参数。它们遵循以下语法:

    [conditional boolean evaluation] ? [value if true] : [value if false]
    

    因此,您可以像下面的示例中那样嵌入它:

    int y = x < 5 ? 1 : 0;   // if x is less than 5, y will be 1, otherwise it will be zero
    

    【讨论】:

    • 谢谢 - 我有一种感觉,就是它在做什么,但我不熟悉条件运算符,完全不知道它们可以以这种方式使用。似乎它大大减少了代码......我将不得不对运营商做更多的阅读。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 2019-06-24
    • 2013-05-13
    • 2018-11-07
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多