c++ - 如何正确处理 ios::failbit
问题描述
我试图制作一个程序,该程序在输入 -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>
头文件。
推荐阅读
- reactjs - 使用 useReducer 使分离的组件消失
- python - 在 Django 循环模板中对第二个模型使用键值查找?
- node.js - 从 S3 下载文件夹时的中断功能
- java - 未安装 JDK 1.8,仅在 Windows 上安装 JRE
- sql - 从每个组中获得最高价值
- excel - 在同一工作簿中创建指向另一个工作表的超链接,指向第一个非空白单元格
- php - 如何在我的 php 表单上再添加 3 个参数
- c - 检查所有 malloc 是否受 NULL 返回保护
- javascript - 在我的 React 项目中出现“不能将类作为函数调用”
- javascript - ng-bind-html 删除 < 之后的内容(小于号)