我在一个函数中有一个循环,该循环通过数组递增检查每个元素以查看它是否与函数的参数匹配。
我的问题是返回值的要求。由于返回一个值完成了函数,如果一个错误的匹配返回 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" };
接下来,您可以替换您的 do
用 for
循环循环,和 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/