C ++ - cin只取一个整数

时间:2018-04-12 15:34:18

标签: c++ cin

如果输入的内容不是数字,例如,此代码可以正常工作F:它将打印错误消息。但是,如果我输入例如2F2或者,它将需要2并通过检查,继续我的代码,然后在下一个cin >>语句中将F放入,然后循环返回并将2放入。

我如何制作它只接受一个数字,例如2而不是{} 2F22.2

int bet = 0;
// User input for bet 
cout << " Place your bet: ";
cin >> bet;
cout <<
// Check if the bet is a number
if (!cin.good())
{
    cin.clear();
    cin.ignore();
    cout << endl << "Please enter a valid number" << endl;
    return;
}

2 个答案:

答案 0 :(得分:0)

bool Checknum(std::string line) {
bool isnum = true;
int decimalpoint = 0;
for (unsigned int i = 0; i < line.length(); ++i) {

    if (isdigit(line[i]) == false) {
        if (line[i] == '.') {
            ++decimalpoint;  // Checks if the input has a decimal point that is causing the error.
        } 

        else {
            isnum = false;
            break;
        }
    }
}
if (decimalpoint > 1) // If it has more than one decimal point.
    isnum = false;
return isnum;
}

如果你从用户那里拿一个字符串,这应该有效。您可以将字符串转换为整数或浮点数(分别为stoi或stof)。它可能不是最好的解决方案,但这就是我所拥有的。请原谅。

答案 1 :(得分:0)

  1. getlinecin读取整行输入。
  2. 创建一个stringstream来解析你得到的字符串。
  3. 在此解析器中,读取数字;如果失败 - 错误
  4. 读取空格;如果它没有到达字符串的末尾 - 错误
  5. #include <sstream>
    
    ...
    
    int bet = 0;
    std::cout << " Place your bet: ";
    while (true)
    {
        std::string temp_str;
        std::getline(cin, temp_str);
        std::stringstream parser(temp_str);
        if (parser >> bet && (parser >> std::ws).eof())
            break; // success
        cout << endl << "Please enter a valid number" << endl;
    }
    

    此代码会一直打印错误消息,直到收到有效输入。不确定这是你想要的,但它是非常习惯的用户界面。

    这里>> ws表示“读取所有空格”。 eof(“文件结尾”)表示“输入字符串的结尾”。