我是 C++ 新手。我写了一个函数,我希望用户在其中输入一个整数值。我知道如何使用以下方法防止输入字符:
if(!(cin>>a))
或者
if (cin.fail())
哪里a
是类型int
。如果用户先输入字符,然后输入数字,例如:ab12
代码有效,但如果用户输入相反的方式,例如12ab
,12
将作为输入值。我怎样才能防止这种情况?
我是 C++ 新手。我写了一个函数,我希望用户在其中输入一个整数值。我知道如何使用以下方法防止输入字符:
if(!(cin>>a))
或者
if (cin.fail())
哪里a
是类型int
。如果用户先输入字符,然后输入数字,例如:ab12
代码有效,但如果用户输入相反的方式,例如12ab
,12
将作为输入值。我怎样才能防止这种情况?
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;
}