【问题标题】:Conditional statements inside `printf``printf` 中的条件语句
【发布时间】:2014-02-15 04:56:16
【问题描述】:

有什么方法可以在其他语句中使用条件语句,例如printf

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

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

有更复杂的条件的方法吗?

【问题讨论】:

  • 你为什么不事先评估表达式?
  • 想知道c语言是否支持这样的语句
  • “更复杂”是什么意思?三元表达式是一个表达式,因此可以用作函数(任何函数)参数。三元表达式中的条件是否“复杂”无关紧要。
  • 只要它们的类型匹配。
  • 更复杂的条件是什么意思??

标签: c printf conditional


【解决方案1】:

你根本不能把语句放到printf里,你只能把表达式放在那里。三元运算符构成一个表达式。表达式基本上是运算符和操作数的树,但是允许使用一些有趣的运算符,例如 ',' 逗号运算符或 '=' 赋值运算符。这允许表达式具有副作用。

【讨论】:

    【解决方案2】:

    不需要更复杂的表达式,条件运算符已经够糟糕了。它没有语言功能。相反,写一个函数。

    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
    

    【讨论】:

    • 三元运算符很正常,如果使用得当,代码可读性更强,更紧凑。另一方面,必须跳过更多方法会使调试复杂系统变得更加困难。如果它是一个简单的 if / else 类型的比较,那就去使用一个三元,如果它嵌套了复杂的逻辑,那么当然,使用一个方法。
    • @Michael 常识必须逐案应用。在某些情况下,?: 运算符使代码更具可读性(例如 switch 语句,其中每个 case 的唯一任务是根据条件分配一个值),但在大多数情况下,例如在在这个例子中,它实际上往往会降低代码的可读性。因此,它是一个谨慎使用的运算符 - 始终考虑其他解决方案是否更具可读性。此外,与 if 语句不同,?: 调用多个隐式类型提升,这可能会导致意外问题。
    【解决方案3】:

    每个条件语句都返回10。这些值为int

    因此,如果您执行printf("%d",a&gt;b);,则将打印1(true) 或0(false)。

    在您的示例中,您使用的是三元运算符a&lt;b?a:b。 如果条件为真,则将打印a,否则将打印b

    【讨论】:

      猜你喜欢
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多