我有一个函数解析来自std :: cin的一些输入,并在成功时返回一个整数值。我需要根据返回值检测解析输入时是否出错。零是有效的回报。我可以用什么来区分有效零和"错误输入"?
如果我需要发布代码作为示例,请告诉我。谢谢!
[编辑]
int parseInput(){
int calculatedValue = 0;
bool parseOk = true;
/* Parse cin for valid input.*/
if (parseOk) {
/* Perform calculation. Can be zero */
}
return calculatedValue; // Any integer is valid
}
答案 0 :(得分:7)
这对于std::optional
来说是完美的工作。关于以返回值通知的最佳替代方案是实现类似的类。
或者,您应该使用例外。完全例外是为了通知用户您的函数出错了。
答案 1 :(得分:2)
您可以使用布尔标志来检查是否出现问题,通常的做法(例如,Qt库使用它)可以执行以下操作:
int getIntegerStuffFromInput(bool & ok);
或
bool getIntegerStuffFromInput(int & value);
答案 2 :(得分:1)
当您从std::cin
读取数字时,最重要的是不要直接阅读int
。相反,您使用std::getline
将整行输入读入std::string
。这样您就可以更轻松地检测错误的输入。
输入行后,您将生成的std::string
转换为int
。
std::string input_line;
std::getline(std::cin, input_line);
// input_line now contains a whole line of input
在C ++ 11中,您只需使用std::stoi
进行转换:
int const input = std::stoi(input_line);
如果字符串无法转换为整数,则此函数将抛出异常。
在预C ++ 11中,您使用std::istringstream
:
std::istringstream is(input_line);
int input = 0;
is >> input;
以下代码检查该行是否可以正确转换为整数:
if (!is)
{
// error
}
答案 3 :(得分:0)
"我可以用什么来区分有效的零和"错误的输入"?"
您基本上有三种选择
如果需要将所有整数作为有效返回值处理:
bool
,false
表示错误输入。如果负整数不是有效的返回值:
只需返回一个负值并测试result < 0
。