如何检查int类型的变量,cin不会将数字作为字符

ann*_*ann 0 c++ cin visual-c++

我是C++的新手.我写了一个函数,我希望用户输入一个整数值.我知道如何使用以下方法阻止输入字符:

    if(!(cin>>a)) 
Run Code Online (Sandbox Code Playgroud)

要么

    if (cin.fail())
Run Code Online (Sandbox Code Playgroud)

哪里a是类型int.如果用户首先输入字符然后输入例如:ab12代码的数字,但是如果用户输入相反的方式,例如12ab,12将其作为输入值.我怎么能防止这种情况?

Ker*_* SB 5

试试这个:

#include <sstream>
#include <string>

std::string line;
int n;

if (std::getline(std::cin, line))
{
    std::istringstream iss(line);
    if (iss >> n >> std::ws && iss.get() == EOF)
    {
        // success, n is now a valid int
    }
}
Run Code Online (Sandbox Code Playgroud)

或者在循环中可能更有用:

for (std::string line; std::getline(std::cin, line); )
{
    std::istringstream iss(line);

    if (!(iss >> n >> std::ws && iss.get() == EOF))
    {
        std::cout << "Sorry, did not understand, please try again.";
        continue;
    }

    std::cout << "Thanks. You said: " << n << std::endl;
}
Run Code Online (Sandbox Code Playgroud)