【问题标题】:C ternary-If without returning valueC三元-如果没有返回值
【发布时间】:2013-10-18 07:18:53
【问题描述】:

我刚开始学习 C prog。使用 Java 一段时间后的语言。

我目前正在尝试通过以下方式使用三元 If:

(currIndex == 0) ?返回 1:currIndex--;

我知道这不是传统的作业形式:

ma​​x = (a > b)?a:b

我正在尝试做的事情可能吗?如果不是,是什么原因?

(我的目的是保持代码简短,因为这行代码会在 switch-case 表达式中出现很多次)

谢谢一百万。

【问题讨论】:

  • 在第一个示例中,您确实稍后从函数中返回一些东西吗?哦,作为一般提示,请尽量避免以这种方式使用三元表达式,这会使您的代码更难阅读。
  • 试试看;你应该能猜到。
  • @JoachimPileborg:是的,无论如何我都会返回 0。你是对的(第二部分),但它嵌套在一个长的 switch-case 表达式中并且出现了很多次。
  • 为什么不:if (currIndex == 0) return 1; currindex--;

标签: c


【解决方案1】:

如果,如您所说,无论如何您都返回一个值,那么是的,这不会成为问题,除了您实际上不能这样做的问题(return 不允许在那里)。为了解决这个问题,让代码更容易理解,你可以这样做:

if (curindex == 0)
    return 1;

--curindex;

/* Rest of code */

在这种情况下不需要else,因为else 部分是减量其余代码,如果您来自return,则不会这样做函数。

【讨论】:

  • 输入行时出现“错误:'return' 之前的预期表达式”:(currIndex == 0) ?返回 1:currIndex--;
  • @user2190298,return 必须是三元运算符中最左边的关键字。在您的三元运算之间不能发生返回!
  • @Pankaj 如果我想按条件返回,是否需要定期的 If?
  • @user2190298, 是的,如果只在条件成功的情况下需要返回,则需要使用'if',否则想继续当前功能
  • @user2190298,Joachim 的答案更好,更适合您的需求。 (如果我正确理解了您的要求):)
【解决方案2】:

在 C 中,问题中的这段代码将无法编译:

(currIndex == 0) ? return 1 : currIndex--;

return 语句不是这样可以嵌入到三元运算符中的表达式。

你可以写:

return (currIndex == 0) ? 1 : currIndex--;

尽管只有当currIndex 是一个全局变量(在函数外部定义;它可能是文件本地或整个程序全局)时,减量才有意义。

【讨论】:

  • 这开始有意义了。问题是这种验证只是众多验证之一。我想我得把它放在自己的函数中。
  • 当您在同一行进行递增/递减操作时,这不是返回的好方法。始终按原样(根据需要)返回 'currIndex-1' 或 'currIndex',但永远不要使用递增/递减运算符,因为行为可能无法预测。
  • 即使currIndex 不为0,此代码也会return。我不认为这是预期的结果。
  • 如果代码不打算在currIndex 不为0 时返回,那么条件需要是:if (currIndex == 0) return 1; currIndex--;,这是一个带有return 的常规if 和一个简单的递减。
【解决方案3】:

为什么要在这里使用三元运算符? currIndex 好像是一个局部变量,即使返回也不会丢失任何东西:

if (!currIndex--)
    return 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多