当输入类型不正确时,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
相反,您可以将 Test1
和 Test2
都声明为 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()
.
重置标志
想请教一个奇怪的问题
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
相反,您可以将 Test1
和 Test2
都声明为 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()
.