【发布时间】:2017-07-20 04:03:25
【问题描述】:
我在一个函数中有一个循环,它通过一个数组递增,检查每个元素是否与函数的参数匹配。
我的问题是返回值的要求。由于返回一个值完成了函数,如果一个错误的匹配返回 false 并且我需要在每个控制路径上返回一个值,那么我将无法检查数组中的任何其他元素以查看它们是否匹配。
我的大部分经验是在 AS3 中,这种功能结构确实有效。我将如何在 C++ 中正确地构造这个函数?
功能:目的是检查输入的命令是否存在,如果为真或假则返回布尔值
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)并没有按照你的想法去做。 -
return std::find(std::begin(cmds), std::end(cmds), _input) != std::end(cmds);? -
这样的函数返回一个布尔值并没有什么意义——你的程序几乎肯定需要类似的代码来计算出哪些命令被输入了,所以你不妨返回一个
int- 值i,并说-1表示无效命令;那么您可以在switch语句中使用int值。稍加努力,您就可以创建一个enum,其中包含每个命令的值和一个无效的哨兵。也就是说,在调用者中直接使用if (input == "login") ... else if (input == "logout") ... else // invalid ...;通常是最好的。
标签: c++ function loops boolean return-value