当输入类型不正确时,C++ 第二个 cin 被吃掉

C++ second cin got eaten when the Input type isn't correct

想请教一个奇怪的问题

double Test1, Test2;

cout << "Please Input the First Number: ";
cin >> Test1;

cout << "\nPlease Input the Second Number: ";
cin >> Test2;

cout << "\nHere is the Answer: " << endl;
cout << Test1 << Test2 << endl;

如果我的Test1输入是一个字符(例如'A'),第二个输入将被吃掉。

我试过使用 cin.ignore(numeric_limits<streamsize>::max())cin.ignore(numeric_limits<streamsize>::max(), '\n') 但似乎没有任何效果。

为什么会出现这个问题?

一旦检测到无效字符,>> 的输入将立即终止。该无效字符不会从流中删除,因此当您执行第二个 >>.

时它仍然存在

问题是char类型默认无法转换为double

相反,您可以将 Test1Test2 都声明为 std::string 类型。

如果你想将它们转换为 double 类型,例如你要用它们做一些数学计算,你可以这样做:

double d1 = std::stod(Test1);

此外,您需要 #include <string> 才能使用 std::string


编辑:

关于为什么您无法第二次输入,当您为 cin >> Test1 输入 'A' 时,您的输入流上会出现一个失败标志。因此,除非标志被解析,否则所有 cin 之后都不会工作。

如果你想让它再次工作,你可以添加:

if(std::cin.fail())
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

第一个cin之后。

您尝试的 cin.ignore() 方法是正确的。但是,您没有使用 cin.clear().

重置标志