cin输入错误类型导致的死循环

2023-11-02

项目场景:

温故而知新:C++学习cin函数,循环读取数据

问题描述

cin函数读取到错误的数据类型时,导致跳过之后所有的cin操作,导致陷入死循环。

void main(){
    while(1)
    {
        int a = 1;
        cout<<"请输入手机号:";
        cin>>a;  //3.14
        cout<<"a ="<<a<<endl; //3
        //多个便两个输入
        int age=1 , hign = 1;
        cout<<"请输入年龄和身高,以空格隔开:";
        cin>>age>>hign;  //18 80
        cout<<"年龄 ="<<age<<endl; //18
        cout<<"身高 ="<<hign<<endl; //80
    }
}


原因分析:

cin函数数据类型限制不严谨

由于cin函数本身没有设置输入限制,所以在我们进行输入类型与我们新建变量的类型不一直的时候,导致cin的一个fail函数至于错误状态,并直接进入下一行代码,并忽略所有接下来cin函数直到程序结束


解决方案:

我们在输入的时候,自己加上输入类型判断,错误的话重新输入,这里要利用到两个函数
cin.clear()是用来更改cin的状态标示符的。
cin.ignore();//忽略掉缓冲区的内容,直到遇到EOF为止

int num;
string name;
cout<<"请输入一个整数:";
cin>>num;
while(cin.fail())
{
       cin.clear();//清除cin的错误信息
       cin.ignore();//忽略掉缓冲区的内容,置于EOF位置
        int a = 1;
        cout<<"请输入手机号:";
        cin>>a;  //3.14
        cout<<"a ="<<a<<endl; //3
        //多个便两个输入
        int age=1 , hign = 1;
        cout<<"请输入年龄和身高,以空格隔开:";
        cin>>age>>hign;  //18 80
        cout<<"年龄 ="<<age<<endl; //18
        cout<<"身高 ="<<hign<<endl; //80
}
cout<<"请输入姓名:";
cin>>string;
cout<<"输入完成"<<endl;

原因分析和解决方案参考了别的作者的作品。

参考文献:https://blog.csdn.net/jnzzls123/article/details/123740627

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cin输入错误类型导致的死循环 的相关文章

  • 为什么通过派生类对基类的引用与 :: - 运算符不明确?

    所以我想知道为什么以下钻石问题的代码片段无法编译 我知道这个问题通常是通过虚拟继承来解决的 我不是故意使用它的 该代码只是为了展示我的问题 即为什么编译器称此不明确 因此 我在 struct Base 中声明了两个成员变量 因为这两个子类
  • 我应该把 try/catch 和“using”语句放在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 try catch using 正确的语法 https stackoverflow com questions 4590490 try catch using right syntax 我想try c
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • uniapp获取用户数据昵称为“微信用户”(小程序)@杨章隐

    原文 微信小程序获取用户信息nickname为 微信用户 Web Try harder的博客 CSDN博客 小程序获取昵称是微信用户 原因 微信 公众平台调整了相关策略 开发者调用type getuserinfo 和直接调用wx getus
  • .Error (10200): Verilog HDL Conditional Statement error at : cannot match operand(s) in the conditio...

    always 记得初始化使用数据 加上 if rst n 不要直接接if dsp xint1 转载于 https www cnblogs com navieli archive 2013 03 11 2954183 html
  • 【Mo 人工智能技术博客】使用 Seq2Seq 实现中英文翻译

    1 介绍 1 1 Deep NLP 自然语言处理 Natural Language Processing NLP 是计算机科学 人工智能和语言学领域交叉的分支学科 主要让计算机处理或理解自然语言 如机器翻译 问答系统等 但是因其在表示 学习
  • python计算高德地图距离和面积

    python计算高德地图距离和面积 因为项目中经常使用高德的距离和面积计算组件 但是高德并未公布计算逻辑 这就导致项目中数据出问题时不知道该如何去定位 因此花费了1天时间把距离计算和面积计算用python语言整理了出来 距离计算公式 fro
  • VUE首屏加载loading效果

    在使用乾坤微前端框架中 遇见图片资源路径存在访问问题 在不搭CDN的情况下 使用base64方式将图片资源打入代码 这样会导致包体积过大 加载时间长 所以加了一个loading效果 1 在index html入口增加 loading li
  • @Profile使用及SpringBoot获取profile值

    之前开发用过 maven 的环境隔离 现在使用springboot的 Profile功能 发现spring体系真的大到我只是学习了皮毛 相比面试问的 IOC bean的作用域等 突然觉得很可笑 官方文档关于 Profile 的使用 http
  • 删除两个字典中非公共的键和值

    删除两个字典中非公共的键和值 需求 对比两个字典 找出公共元素 将非公共元素删除 dict1 dict2 res for i in dict1 if i not in dict2 print i del dict1 i res append
  • Vue3项目中使用TypeScript

    单文件用法 在单文件组件中使用 TypeScript 需要在 小结 注意 当 script 中使用了 ts 模板 template 在绑定表达式时也支持ts 如果在表达式中不指名类型时 编译器会报警告提示 正确写法 表达式指定类型 组合式A
  • 一文说清楚c++模板Template的用法

    一 引言 模板 Template 指c 程序设计语言中采用类型作为参数的程序设计 二 函数模板 1 通用格式 函数模板定义格式 template
  • Git:同步他人的远程仓库至自己的Git服务器并自动定时更新

    昨天晚上将2015年一篇不负责的Git服务器搭建的教程更新了一下 详见 在CentOS下搭建自己的Git服务器及使用nginx配置gitweb面板 今天折腾了一些本地的项目 倒是可以了 现在的需要是 将远程的仓库 同步一份到自己的git服务
  • C#复习题1(含答案及解析)

    1 单选题 下面有关for循环的正确描述是 A for循环只能用于循环次数已经确定的情况 B for循环的执行流程是先执行循环体语句 后判断表达式 C 在for循环中 表达式1和3可以省略 但表达式2是不能省略 D for循环的循环体中 可
  • JVM黑马版:笔记、应用、速查

    前言 由于工作中时常和JVM打交道 但是对JVM的体系缺乏系统深入了解 日前跟随b站上黑马程序猿的课程成体系地学习了JVM 结合工作中的实践写就了此笔记 黑马原视频地址 https www bilibili com video BV1yE4
  • 无域名家庭异地组网 Headscale +自建 DERP 中继服务器

    参考资料 Headscale 自部署 Tailscale 服务端 泠泫凝的异次元空间 lxnchan cn 20条消息 比 Tailscale 更好的内网穿透方案 Headscale 米开朗基杨的博客 CSDN博客 156条消息 自建 DE
  • Microsoft Access database engine 2010 (Chinese (Simplif... 您不能安装64位版本的Microsoft Access 2010 数据库引擎

    问题 Microsoft Access database engine 2010 Chinese Simplif 您不能安装64位版本的Microsoft Access 2010 数据库引擎 因为您当前已安装32位的offce 产品 若要安
  • Python render_notebook()画图不显示

    关注微信公共号 小程在线 关注CSDN博客 程志伟的博客 使用jupyter lab画图 render notebook 画图不显示 解决方法 from pyecharts globals import CurrentConfig Note
  • p值小于0.05拒绝还是接受_数据科学20

    1 假设检验 假设检验用来判断样本与样本 样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法 零假设H0 差异是由抽样误差引起的 一般形式是假定参数等于某个固定值 如假设组间差异为0 回归系数为0等 备择假设H1 存在本质差异
  • 伺服电机脉冲控制方式

    伺服电机脉冲控制方式 伺服电机控制方式有脉冲 模拟量和通讯控制这三种 在不同的应用场景下 该如何确定选择伺服电机控制方式 1 伺服电机脉冲控制方式 在一些小型单机设备 选用脉冲控制实现电机的定位 应该是最常见的应用方式 这种控制方式简单 易
  • Django,Flask ,FastAPI 怎么选?

    阅读大约需要 4 5 分钟 首先我们达成一个共识 框架是用来帮助我们提升效率 节省时间 避免处理那些低级细节的 如果能达到这个目标 就是一个合适的框架 选择合适的框架 会事半功倍 Python 领域 开发 Web 应用程序的三个主流框架是
  • 面试准备:Java常见面试题汇总(一)

    面试准备 Java常见面试题汇总 一 面试准备 Java常见面试题汇总 二 面试准备 Java常见面试题汇总 三 文章目录 1 面向对象的特点 特性有哪些 补充 Java的多态是编译时多态还是运行时多态 2 接口和抽象类的相同点和不同点 3
  • cin输入错误类型导致的死循环

    项目场景 温故而知新 C 学习cin函数 循环读取数据 问题描述 cin函数读取到错误的数据类型时 导致跳过之后所有的cin操作 导致陷入死循环 void main while 1 int a 1 cout lt lt 请输入手机号 cin