【问题标题】:How can I fit a return statement in a ternary conditional? [duplicate]如何在三元条件中拟合 return 语句? [复制]
【发布时间】:2018-09-06 23:21:25
【问题描述】:

我知道三元条件需要表达式才能工作,但我想知道这样的事情是否有聪明的解决方法:

#include <stdbool.h>

bool in_asc_order(const int *arr, size_t arr_size)
{
    int count = 0;
    bool result = false;

    while(count < arr_size - 1)
    {
        (arr[count] <= arr[count + 1])? result = true : (return false);
        count++;
    }

    return result;
}

而不是这样写:

#include <stdbool.h>

bool in_asc_order(const int *arr, size_t arr_size)
{
    int count = 0;
    bool result = false;

    while(count < arr_size - 1)
    {
        if(arr[count] <= arr[count + 1])
        {
            result = true;
        }
        else
        {
            return false;
        }
        count++;
    }

    return result;
}

我热衷于使用这个条件。任何帮助都会很棒。

【问题讨论】:

  • 了解表达式。 C 主要是关于表达式的。 (一些......)语法说:STMT := returnEXPR ';'而 EXPR 可以是三元表达式。
  • 为什么不简化你的逻辑,只在下一个元素大于或等于前一个元素时才提前返回?
  • 你不能。使用if
  • @squiguy 你的意思是小于吗?如果 int 数组按升序排列,此函数将返回 true。
  • 对不起,是的。我把它翻过来了。

标签: c


【解决方案1】:

我不会写这些东西。这个怎么样?

bool in_asc_order(const int *arr, size_t arr_size)
{
  if (arr_size == 0)
    return true;
  for (size_t i = 0; i < arr_size - 1; i++)
    if (arr[i] > arr[i + 1])
      return false;
  return true;
}

【讨论】:

  • 打败我。不过,可能应该让i 成为size_t。并在做任何事情之前检查arr_size &gt; 0。其他有符号/无符号比较的疯狂可能会随之而来。
  • 因为我觉得把默认返回写成“真”感觉不舒服。检查 false 并不总是与检查“true”相同。这并不是我提出的真正问题。
  • @Death_by_Ch0colate : 快速返回比你的 indicator 变量 更紧凑。这也是正确的。 (并且是内联的良好候选者)
  • 问题结束了,她来了:bool in_asc_order(const int *arr, size_t arr_size) { if (arr_size &lt; 2) return true; if (arr[i] &lt; arr[i + 1]) return false; return in_asc_order(arr+1, arr_size -1); }
  • 你去吧:bool in_asc_order(const int *arr, size_t arr_size) { return (arr_size &lt; 2) ? true : arr[0] &gt; arr[1] ? false : in_asc_order(arr+1, arr_size -1); } ...如果你没看错的话:它只是一个表达式
猜你喜欢
  • 2016-06-28
  • 2011-04-24
  • 1970-01-01
  • 2018-09-18
  • 2020-10-25
  • 1970-01-01
  • 2014-11-06
  • 2010-12-25
  • 2020-11-28
相关资源
最近更新 更多