C++ |如何在每次不返回值的情况下循环 If 语句

标签 c++ function loops boolean return-value

我在一个函数中有一个循环,该循环通过数组递增检查每个元素以查看它是否与函数的参数匹配。

我的问题是返回值的要求。由于返回一个值完成了函数,如果一个错误的匹配返回 false 并且我需要在每个控制路径返回一个值,那么我将无法检查数组中的任何其他元素以查看它们是否匹配。

我的大部分经验都在 AS3 中,这个函数结构在其中确实有效。我将如何在 C++ 中正确构建此函数?

功能:它的目的是检查输入的命令是否存在,如果是真或假则返回一个 boolean 值

bool Commands(string _input)
{
    string cmds[] = { "login", "logout", "exit" };

    int i = 0;
    do {
        if (_input == cmds[i])
        {
            return true;
        }
        else
        {
            if (i == sizeof(cmds))
            {
                return false;
            }
        }
        i++;
    } while (i < sizeof(cmds));
}

最佳答案

我会提出一些改进建议:

sizeof(cmds)返回 cmds 的大小以字节为单位 ,这将是 sizeof(string) * 3或者例如 64 位系统上的 96;您的循环将超出数组的末尾,导致未定义的行为。一种选择是使用 sizeof(cmds)/sizeof(*cmds)获取元素的数量,但出于您的目的,使用 std::vector 会更简单带有初始化列表:

std::vector<string> cmds { "login", "logout", "exit" };

接下来,您可以替换您的 dofor 循环循环,和 sizeof.size() std::vector 的成员函数.如果输入不匹配,你根本就不会 return并继续循环的下一次迭代。如果函数在循环后没有返回,则没有找到任何项目,所以你可以 return false .

for (size_t i = 0; i < cmds.size(); ++i)
  if (_input == cmds[i])
    return true;
return false;

您还可以将循环替换为调用 std::find来自标准的算法 <algorithm> header :

return std::find(std::begin(cmds), std::end(cmds), _input) != std::end(cmds);

关于C++ |如何在每次不返回值的情况下循环 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42521372/

相关文章:

c++ - 查找通过引用传递的容器的尺寸

c++ - 在引导期间驱动程序初始化后执行操作

c++ - 在 C++ 中将 uint8_t 缓冲区转换为复杂的浮点缓冲区

c++ - std vector 迭代器不支持地址运算?

Mysql 阻止在某个日期之后插入

用作结构字段或结构方法

c++ - 如何在 C++ 中迭代地将函数应用于数据?

java - 如何在满足条件后从循环中跳出

c# - IObservable 在无限循环中产生结果

python - 惯用的 Python : 'times' loop