C格式字符串问题

时间:2014-08-29 20:06:30

标签: c printf string-formatting ternary-operator

我还在学习C并尝试理解我在后面看到的一些内容:

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

显然,我知道printf%s等。我不能完全掌握的是我应该寻求理解? :以及什么我的其他选择是。我不熟悉术语,所以我甚至不确定这是格式字符串的一部分"。我应该对此进行评估,它会返回row[i]并继续返回row[i],直到它到达NULL为止?

澄清和指向正确的方向,以更好地学习和理解这一点将非常感激。

3 个答案:

答案 0 :(得分:3)

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

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

printf("%s ", result);

答案 1 :(得分:2)

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

答案 2 :(得分:1)

?运算符称为conditional operator(或三元运算符)。它可以被认为是一个&#34;在线条件语句&#34;。您共享的代码相当于:

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