短路评估VS 2017 C++
问题描述:
我试图从用户使用std :: string得到一个数字,并且想要先检查该字符串是否为空,并且它只包含数字,然后检查数字是否高于比零0短路评估VS 2017 C++
当我建立它,只需按下输入我得到一个异常未处理的无效参数在stoi函数。
我在VS(2012)的旧版本中尝试它,并得到相同的错误。
短路评估是否适用于VS?
static const bool is_number(const char caracter)
{
return(caracter >= '0' && caracter <= '9');
}
template <typename T> static const bool all_numbers(const T &str)
{
if (!str.empty())
{
auto it = str.cbegin();
if ((str.front() == '+' || str.front() == '-') && (str.size()>1)) ++it;
for (it; it != str.cend(); ++it) if (!is_number(*it)) return false;
return true;
}
else return false;
}
int main()
{
std::string str;
do
{
std::cout << " Number: ";
getline(std::cin, str);
std::cin.clear();
}while (!all_numbers(str) && std::stoi(str) <= 0);
return 0;
}
答
当然,短路工作在Visual Studio中,你可以很容易地验证了这一点。
然而,你的逻辑是错误的:
(!all_numbers(str) && std::stoi(str) <= 0);
在这里,我们只执行stoi
如果输入不所有数字。这显然是倒退。
我想也许你的意思是写||
而不是?
您采取了哪些步骤来解决您的问题? –
我可以只添加另一个do-while,它会工作,但我想知道VS的短路是否工作? – Yaz
当您遇到此结果时,您提供给您的程序的输入是什么? –