C++初学者指南-2.输入和输出---从输入流错误中恢复

news2024/11/26 9:13:51

C++初学者指南-2.输入和输出—从输入流错误中恢复

文章目录

  • C++初学者指南-2.输入和输出---从输入流错误中恢复
    • 怎么了?
    • 解决方案:出错后重置输入流

怎么了?

示例:连续输入

int main () {
  cout << "i? ";
  int i = 0;
  cin >> i;  // ← 第一次
  cout << "j? ";
  int j = 0;
  cin >> j;  // ← 第二次
  cout << "i: " << i <<", " 
       << "j: " << j <<'\n';
}

有效输入⇒预期行为

$ i? 2
$ j? 3
i: 2, j: 3

i 的输入无效⇒无法读取 j

$ i? asdf
i: 0, j: 0

为什么会这样?
如果 cin 在以下代码片段中

int i = 0;
cin >> i;

读取无法转换为 int 类型的字符:

  • cin 的错误位被设置了。
  • cin的缓冲区内容没有被丢弃,仍然包含有问题的输入。
  • 任何尝试从cin读取整数的操作也会失败。

解决方案:出错后重置输入流

  • 清除 cin 的错误位。
  • 清除 cin 的输入缓冲区。
void reset_cin () {    
  // 清除所有错误状态位
  cin.clear(); 
  // 清除输入缓冲区
  cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
int main () {
  cout << "i? ";
  int i = 0;
  cin >> i;  // ← 1st
  if (cin.fail()) reset_cin();
  cout << "j? ";
  int j = 0;
  cin >> j;  // ← 2nd
  cout << "i: " << i <<", " 
       << "j: " << j <<'\n';
}

i 的无效输入不会影响 j

$ i? asdf
$ j? 3
i: 0, j: 3

附上原文地址
如果文章对您有用,请随手点个赞,谢谢!^_^
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1871624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web服务器与Apache(虚拟主机基于ip、域名和端口号)

一、Web基础 1.HTML概述 HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语音,用于创建和组织Web页面的结构和内容&#xff0c;HTML是构建Web页面的基础&#xff0c;定义了页面的结构和内容&#xff0c;通过标记和元素来实现 2.HTML文件结构 <html>…

【Linux进阶】基础IO函数详解

1.函数open和openat 调用open或openat函数可以打开或创建一个文件。 #include <fcntl.h> int open(const char *path, int ofag, ... /* mode_t mode */);int openat (int fd, const char *path, int oflag, ... /* mode_t mode */); 我们将最后一个参数写为...&#x…

Windows下activemq开启jmx

1.activemq版本信息 activemq&#xff1a;apache-activemq-5.18.4 2.Windows下activemq开启jmx 1.进入activemq conf目录&#xff0c;备份activemq.xml文件 2.编辑activemq.xml文件&#xff0c;在broker节点增加useJmx"true" <broker xmlns"http://active…

《Windows API每日一练》6.4 程序测试

前面我们讨论了鼠标的一些基础知识&#xff0c;本节我们将通过一些实例来讲解鼠标消息的不同处理方式。 本节必须掌握的知识点&#xff1a; 第36练&#xff1a;鼠标击中测试1 第37练&#xff1a;鼠标击中测试2—增加键盘接口 第38练&#xff1a;鼠标击中测试3—子窗口 第39练&…

独立付费进群系统

无授权源码 有独立分销代理端 域名防封 可对接码支付 易支付 需要用到回调 源码链接

腾讯实时语音编码大突破 电梯、地库里通话也不卡顿

腾讯宣布&#xff0c;腾讯主导的新一代实时语音编码行业标准AVS3P10&#xff0c;即将正式对外发布。由腾讯会议天籁实验室携手腾讯AI Lab研发的Penguins编解码器&#xff08;即AVS3P10行业标准的原型&#xff09;&#xff0c;把经典信号处理和最新的深度学习技术结合在一起&…

pppd 返回错误码 含义

错误码 00&#xff1a; pppd已经断开&#xff0c;或者已经成功建立连接后请求方又中 断了。 01&#xff1a; 发成了一个严重错误&#xff0c;例如系统调用失败或者访问非法内存。 02&#xff1a; 处理给定操作是检测到错误&#xff0c;例如使用两个互斥的操作。 03&#xff1a;…

测试报告-HTMLTestRunner报告优化(中/英文)

引用原始的HTMLTestRunner.py文件生成的测试报告在美观性不是很好&#xff0c;使用在此文件基础上优化后的HTMLTestReportCN.py文件(生成的报告为中文)、HTMLTestReportEN.py文件(生成的报告为英文)。 1 首先新建一个Python项目 例如&#xff1a;testHtmlReport 创建case包&am…

【JVM】Java虚拟机运行时数据分区介绍

JVM 分区&#xff08;运行时数据区域&#xff09; 文章目录 JVM 分区&#xff08;运行时数据区域&#xff09;前言1. 程序计数器2. Java 虚拟机栈3. 本地方法栈4. Java 堆5. 方法区6. 运行时常量池7. 直接内存 前言 之前在说多线程的时候&#xff0c;提到了JVM虚拟机的分区内存…

# 音频处理4_傅里叶变换

1.离散傅里叶变换 对于离散时域信号 x[n]使用离散傅里叶变换&#xff08;Discrete Fourier Transform, DFT&#xff09;进行频域分析。 DFT 将离散信号 x[n] 变换为其频谱表示 X[k]&#xff0c;定义如下&#xff1a; X [ k ] ∑ n 0 N − 1 x [ n ] e − j 2 π k n N X[k]…

Qt 使用代码布局,而不使用UI布局

一、工程的建立&#xff1a; 1、打开Qt Creator&#xff0c;文件&#xff0c;新建文件或项目 2、选择Application&#xff0c;Qt Widgets Application 3、写入名称&#xff0c;选择qmake 4、选择基类Base class&#xff0c;去除Generate form 务必选择QWidget&#xff0c;若…

读AI新生:破解人机共存密码笔记14逆强化学习算法

1. 数学保证 1.1. 如果我们要沿着新的路线重建人工智能&#xff0c;那么它的基础必须是坚实的 1.2. 通过精确的定义和一步步的严格数学证明来提供无可辩驳的保证 1.3. 希望证明一个定理&#xff1a;设计人工智能系统的一种特殊方式可以确保它…

Linux如何安装openjdk1.8

文章目录 Centosyum安装jdk和JRE配置全局环境变量验证ubuntu使用APT(适用于Ubuntu 16.04及以上版本)使用PPA(可选,适用于需要特定版本或旧版Ubuntu)Centos yum安装jdk和JRE yum install java-1.8.0-openjdk-devel.x86_64 安装后的目录 配置全局环境变量 vim /etc/pr…

Python | Leetcode Python题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; class Solution:def rangeBitwiseAnd(self, m: int, n: int) -> int:while m < n:# 抹去最右边的 1n n & (n - 1)return n

spring-boot-starter-json配置对象属性为空不显示

问题背景 在Spring Boot中使用spring-boot-starter-json&#xff08;通常是通过jackson实现的&#xff09;时&#xff0c;如果你希望在序列化对象时&#xff0c;如果某个属性为空&#xff0c;则不显示该属性&#xff0c;你可以使用JsonInclude注解来实现这一点。 pom.xml <…

net Framework OAuth2.0

grant_type client_credentials 客户端凭证password 密码模式 用于资源所有者密码凭据token 隐藏式 、 简化式 简化模式又称为隐式授权码模式&#xff0c;它是授权码模式的一个简化版本authorization_code 授权码 A. 第三方程序向资源拥有者(用户)发送授权请求&#xf…

如何获得更高质量的回答-chatgpt

在与技术助手如ChatGPT进行交互时&#xff0c;提问的方式直接影响到你获得的答案质量。以下是几个关键的提问技巧&#xff0c;可以帮助你在与ChatGPT的互动中获得更有效的回答&#xff1a; 1. 清晰明了的问题 技巧&#xff1a;确保问题清晰明了&#xff0c;避免含糊不清或模糊的…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 特殊加密算法(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

一键智控,舒适无限:网关在风机盘管智能温控中的应用

风机盘管智能控制系统采用钡铼技术系列无线网关&#xff0c;搭配各类风机设备及传感器组成无线物联中央空调室内机管理系统&#xff0c;实现整个办公楼的空调环境智能化管理。在建筑舒适度的前提下&#xff0c;降低能耗&#xff0c;避免能源浪费。 网关通信接口采用无线传输的…

vscode刷LeetCode算法题环境配置

首先&#xff0c;下载nodejs 在vscode中安装LeetCode插件 安装好进行配置 选择leetcode-cn 填上刚才下载node.exe的路径 完成之后重启一下vscode 重启之后登陆LeetCode 完成之后就可以看到题目了 点击 code now 就可以开始刷题了