如何正确处理 ios::failbit
How to handle the ios::failbit correctly
我尝试编写一个程序,在输入 -1 之前获取输入并使用异常正确处理输入。
它需要用户输入 FirstName
和 Age
并打印 FirstName
并将年龄增加 1。如果第二个变量不是整数(年龄),那么它应该打印 FristName
和 0
.
但是我的程序给了我意外的输出。我该如何解决这个问题?
提前致谢。
输入格式
John 12
Michel 15
Alice Graz 11
Bob 15
-1
预期输出
John 13
Michel 16
Alice 0
Bob 16
我的代码
#include <string>
#include <stdexcept>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
string inputName;
int age;
cin.exceptions(ios::failbit);
cin >> inputName;
while (inputName != "-1")
{
try
{
cin >> age;
}
catch (exception ex)
{
age = -1;
if (cin.fail())
cin.clear();
cin.ignore();
}
cout << inputName << " " << (age + 1) << endl;
cin >> inputName;
}
return 0;
}
尝试像这样使用 cin.ignore()
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
您必须包含 <limits>
头文件。
我尝试编写一个程序,在输入 -1 之前获取输入并使用异常正确处理输入。
它需要用户输入 FirstName
和 Age
并打印 FirstName
并将年龄增加 1。如果第二个变量不是整数(年龄),那么它应该打印 FristName
和 0
.
但是我的程序给了我意外的输出。我该如何解决这个问题?
提前致谢。
输入格式
John 12
Michel 15
Alice Graz 11
Bob 15
-1
预期输出
John 13
Michel 16
Alice 0
Bob 16
我的代码
#include <string>
#include <stdexcept>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
string inputName;
int age;
cin.exceptions(ios::failbit);
cin >> inputName;
while (inputName != "-1")
{
try
{
cin >> age;
}
catch (exception ex)
{
age = -1;
if (cin.fail())
cin.clear();
cin.ignore();
}
cout << inputName << " " << (age + 1) << endl;
cin >> inputName;
}
return 0;
}
尝试像这样使用 cin.ignore()
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
您必须包含 <limits>
头文件。