C ++ int函数。当零是有效返回值时,如何检测false?

时间:2015-03-01 12:25:06

标签: c++

我有一个函数解析来自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
}

4 个答案:

答案 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)

  

"我可以用什么来区分有效的零和"错误的输入"?"

您基本上有三种选择

如果需要将所有整数作为有效返回值处理:

  1. 抛出异常,可以在函数调用外部处理
  2. 通过引用传递专用输出参数,并从函数返回boolfalse表示错误输入
  3. 如果负整数不是有效的返回值:

    只需返回一个负值并测试result < 0