在 `printf` 中使用条件语句

4

有没有一种方法可以在其他语句中使用条件语句,例如 printf

一种方法是使用三元运算符 ? : 例如:

printf("%d", a < b ? a : b);

是否有更复杂条件的方法?


4
为什么不事先计算表达式? - Alexander
1
“更复杂”是什么意思?三元表达式是一个表达式,因此可以用作函数(任何函数)参数。无论三元表达式中的条件是否“复杂”,都没有关系。 - Some programmer dude
只要它们的类型匹配。 - herohuyongtao
1
什么意思是更加复杂的条件? - KARTHIK BHAT
你试过了吗?使用 printf 时,你必须确保格式说明符与参数类型匹配,但除此之外,在格式说明符后的 printf 参数可以是任何表达式,包括三元条件运算符。 - M Oehm
显示剩余3条评论
3个回答

4

没有必要使用更复杂的表达式,条件运算符已经够糟糕了。没有此类语言特性。相反,写一个函数。

printf("%d", compare(a,b)); // good programming, readable code

printf("%d", a<b?(x<y?x:y):(x<y?y:x)); // bad programming, unreadable mess

2
三元运算符很常见,如果使用得当,可以使代码更易读且更紧凑。另一方面,需要跳转到更多的方法可能会使调试复杂系统变得更加困难。如果只是简单的 if / else 类型的比较,请使用三元运算符;如果嵌套有复杂逻辑,则可以使用方法。 - Michael
@Michael 通常情况下,需要根据具体情况谨慎使用常识。确实有一些情况下,如switch语句中每个分支的唯一任务是基于条件赋值的情况下,?:操作符可以使代码更易读。但在大多数情况下,例如此示例中,它实际上会使代码变得更加难以阅读。因此,这是一个需要谨慎使用的运算符-始终考虑其他解决方案是否更易读。此外,与if语句不同,?:调用多个隐式类型提升,可能会导致意外问题。 - Lundin

2
每个条件语句都会返回10。这些值是int类型的。
因此,如果您执行printf("%d",a>b);,则将打印1(true)或0(false)。
在您的示例中,您正在使用三元运算符a<b?a:b。如果条件为真,则将打印a,否则将打印b

2

你不能在printf中放置语句,只能放置表达式。三元运算符形成一个表达式。表达式基本上是由运算符和操作数组成的树状结构,但是有一些奇怪的运算符是允许的,比如逗号运算符或赋值运算符'='。这使得表达式具有副作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接