0

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

    if(!(cin>>a)) 

或者

    if (cin.fail())

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

4

1 回答 1

5

Try this:

#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
    }
}

Or perhaps more usefully in a loop:

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;
}
于 2013-03-19T18:24:52.660 回答