C++程序存在多个cin输入时,后边的cin失效

2023-05-16

1 参考资料

1、https://www.cnblogs.com/pengjun-shanghai/p/4800871.html

2、《C++ Primer Plus(第6版)中文版》,第 4.2.5 小节,混合输入字符串和数字,P81;

3、代码测试 Git 仓库地址:https://github.com/FightingBoom/studycode

2 情况分类

2.1 一个单词

1、问题现象,参考如下代码示例

#include <iostream>

int main()
{
    using namespace std;

    cout << "What year was your house built?\n";
    
    int year;
    cin >> year;    // 原始方法
    
    cout << "What is its street address?\n";
    char address[80];
    cin.getline(address, 80);

    cout << "Year built: " << year << endl;
    cout << "Address: " << address << endl;
    cout << "Done!\n";

    return 0;
}

上述代码,运行结果如下,在输入年份之后,直接就结束了,没有给输入地址的机会

What year was your house built?
1966
What is its street address?
Year built: 1966
Address:
Done!

2、问题原因:cin 输入会把换行符留在输入缓冲区,因此第二次获取输入时,首先获取到的就是换行符,导致第二次还没输入,就直接结束了;

3、解决方法
(1)获取输入之后,再次 get 一次,把换行符读出来,保持输入缓冲区无其他内容;

cin >> year;    // 方法一
cin.get();      // 方法一

(2)获取输入之后,clear 清空缓冲区,然后 sync 同步缓冲区更改,这样也能保证缓冲区无其他内容;

cin >> year;
cin.clear();
cin.sync();

2.2 多个单词

1、针对多个单词输入的情况,就不能直接使用 cin 获取了,这样只会获得第一个单词;

2、此时可以使用 cin 库自带的接口 get 或者 getline ,以 getline 举例

#include <iostream>

using namespace std;

int main()
{
    char cFirstName[20];    // first name,根据需要增大数组容量
    char cLastName[20];     // last name,根据需要增大数组容量
    char cGrade;            // grade
    int iAge;               // age

    cout << "What is your first name? ";
    cin.getline(cFirstName, 20);
    cin.clear();
    cin.sync();

    cout << "What is your last name? ";
    cin.getline(cLastName, 20);
    cin.clear();
    cin.sync();

    cout << "What letter grade do you deserve? ";
    cin.get(cGrade);
    cin.clear();
    cin.sync();

    cout << "What is your age? ";
    cin >> iAge;
    cin.clear();
    cin.sync();

    cout << "Name: " << cLastName << ", " << cFirstName << endl;
    cout << "Grade: " << (char)(cGrade + 1) << endl;
    cout << "Age: " << iAge << endl;

    return 0;
}

如上代码,执行结果参考如下

What is your first name? Betty Sue
What is your last name? Yewe
What letter grade do you deserve? B
What is your age? 22
Name: Yewe, Betty Sue
Grade: C
Age: 22

3、针对多个单词输入,需要使用 getline ;

4、同样的,该测试代码有多次 cin 输入的情况,就可以使用之前的方法,先 clear ,在 sync 即可;

    cin.getline(cFirstName, 20);
    cin.clear();
    cin.sync();

3 总结

1、cin 获取输入时,会把换行符留在输入缓冲区,因此第二次获取输入时,会直接读取到换行符,就结束了,导致读取的数据是空。

2、解决思路很简单,就是把输入缓冲区清空,而清空缓冲区又有两种方法。

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

C++程序存在多个cin输入时,后边的cin失效 的相关文章

  • 查看一个可执行文件或者库的依赖库

    经常需要查看一个可执行文件或者库依赖那些库文件 通常情况下这很好办 xff0c 使用ldd命令就可以了 xff0c 比如 xff1a 1 2 3 4 5 6 ldd bin bash linux vdso so 1 61 gt 0x0000
  • 构建gcc交叉编译工具链

    如何构建一个GCC 交叉编译工具链 GCC不仅是一个编译器 xff0c 它是一个开源工程 xff0c 可以让你建立各种编译器 一些编译器支持多线程 xff0c 一些支持共享库 xff0c 一些支持 Multilib xff08 典型的应用是
  • buildroot VS yocto

    翻译自Buildroot vs OpenEmbedded or Yocto Project A Four Hands Discussion 2016 pdf Buildroot 和 yocto的对比 对比内容 xff1a xff08 1 x
  • git查看各个branch之间的关系图

    提供两种方法 xff1a 1 使用git log命令 git log graph decorate oneline simplify by decoration all 说明 xff1a decorate 标记会让git log显示每个co
  • CUDA入门(一)

    最近我也都在看CUDA xff0c 自己看书和练习也都搞了一个月了 而且经常在CSDN上逛 xff0c 也发现了很多问题 xff0c 所以决定自己写点这方面的东西 xff0c 方便自己也方便后来人 根据我的调查 xff0c 我发现现在的初学
  • Openwrt Package xxx is missing dependencies for the following libraries 问题分析

    Openwrt编译时通常会遇到如下问题 xff1a Openwrt Package xxx is missing dependencies for the following libraries libxxx so 首先检查package
  • shell command命令

    近期遇到一个比较少见的命令command xff0c 详细如下 xff1a command 是一些shell的内建命令 我本机使用的是dash xff0c 服务器使用的是bash xff0c 其他shell没有测试 dash user sp
  • 深入理解Linux内核-第五章笔记

    内核同步 内核同步 内核如何为不同的请求提供服务 内核抢占 同步原语 每CPU变量原子操作优化和内存屏障自旋锁顺序锁读 拷贝 更新RCU信号量完成量禁止本地中断 对内核数据结构的同步访问避免竞争条件的实例 内核如何为不同的请求提供服务 内核
  • 一些截图

  • 基于busybox的bootchart分析

    一 Bootchart简介 Bootchart官网http www bootchart org xff0c 已经很久没有更新了 Bootchart的目的是将启动阶段的性能可视化 xff08 Boot Process Performance
  • 用Android手机spydroid-ipcamera搭载局域网监控环境

    相比有很多人都想用手机实现视频监控吧 xff0c 今天这个教程 xff0c 将会教大家用spydroid ipcamera搭建局域网监控环境 准备工作 xff1a 1 准备一部带有摄像头的 xff0c API level在9以上的手机 xf
  • 3D数学--学习笔记(三):3D中绕任意轴的旋转

    本文转自 xff1a http blog csdn net zjc game coder article details 24269757 不要小看我们在Unity或者3DMAX中的一个简单的旋转物体操作 题记 这里需要用到的知识 xff1
  • Android拼图游戏开发全纪录0

    本文转自 xff1a http blog csdn net eclipsexys article details 18881849 最近刚完成一个Android的小项目 拼图游戏 项目并不复杂 xff0c 但也是一个完整的项目 xff0c
  • Android拼图游戏开发全纪录1

    本文转自 xff1a http blog csdn net eclipsexys article details 18887567 今天我们继续来讲解Android拼图游戏全纪录的第二篇 xff0c 今天要完成的任务比较简单 xff1a 界
  • Android 4.2 SafeVolume机制

    最近一个项目过认证 xff0c 在声压测试时failed 整改方案为 xff1a 在用户将耳机音量提高至安全音量以上时 xff0c 阻止此操作并弹出警告框 xff0c 待用户确认后才提升音量 一开始并不知道android4 2中默认自带了这
  • MarkDown基础语法

    MarkDown基础语法 什么是MarkDown Markdown是一种轻量级标记语言 xff0c 创始人为约翰 格鲁伯 xff08 英语 xff1a John Gruber xff09 允许人们使用易读易写的纯文本格式编写文档 xff0c
  • 命令行查看android手机wi-fi密码

    两招帮你查看wifi密码 xff08 抱歉 xff1a 由于无法传第三张图片 xff0c 第三个图片内容请参照参考网址获得 xff09 第一 xff0c 手机必须root 第二 xff0c 用es文件浏览器或RE管理器进入date misc
  • android网络时间同步总结

    本文转自 xff1a http www cnblogs com hoji real archive 2011 11 14 2247984 html 最近看了下网络时间同步 xff0c 总结一下 整体描述 xff1a android网络时间同
  • win7删除ubuntu系统

    win7 43 ubuntu双系统 xff0c ubuntu开机的时候 xff0c 电脑会响 xff0c ubuntu系统进不去 进入win7系统后 xff0c F盘是通过磁盘管理压缩剩余空间安装ubuntu系统的 xff0c QQ安装在F
  • 手机电池和taskId的寻找

    刷机的时候启动手机时间比较久 xff0c 拔掉电池给手机断电 xff0c 启动的比较快一点 一直这样干 xff0c 一段时间以后 xff0c 手机充电的时候 xff0c 会显示bad battery 提示电池坏掉 电池坏掉后 xff0c 刷

随机推荐

  • Objective-c的内存管理MRC与ARC

    Objective c中提供了两种内存管理机制MRC xff08 MannulReference Counting xff09 和ARC Automatic Reference Counting xff0c 分别提供对内存的手动和自动管理
  • 修复:connectToBus() Connection Error(Using X11 for dbus-daemon autolaunch was disabled at compile time

    1 问题 xff1a d bus 在 dbus daemon 没有运行起来的环境中会报这个错 xff1a connectToBus Connection Error Using X11 for dbus daemon autolaunch
  • Git 初体验

    文章目录 1 文章结构2 Git安装3 个人开发3 1 怎么理解SSH xff1f 3 2 SSH场景3 2 1 场景13 2 2 场景23 2 3 场景3 3 3 怎么理解HTTPS xff1f 4 公司开发5 小二总结 上篇文章 xff
  • 一年一度的1024,一周一次的每周思考,来点碰撞

    时间过得真快呀 xff0c 又到了著名的 程序员节 最近在整理任务的时候 xff0c 发现列表中还藏着这样一条 在科技日益发达的今天 xff0c 恰逢 程序员节 xff0c 小二不免又产生了一些思考 前几年 xff0c 老家附近修了飞机场
  • 鲲鹏HCIA系列笔记题库汇总(内含PDF)

    大家好呀 xff0c 我是小二 xff0c 好久不见 之前小二分享了几篇鲲鹏 HCIA 认证的笔记 xff0c 反响还不错 现在小二特地把几篇笔记整理成一个 PDF 文档 xff0c 方便阅读 xff0c 也方便查找 目前已经更新到 V1
  • 【每周思考-15】我是标题

    不知道写什么 xff0c 先陈述一些事实吧 C程序设计语言 本周终于看完了第一遍 xff0c 练习题正在进行 从零开始学理财 杨婧 也看完了 xff0c 实操也在慢慢进行 xff0c 周期久一点 x1f611 上周末看了 金陵十三钗 xff
  • javaweb中jstl无法解析的错误解决方法

    javaweb中jstl无法解析的错误解决方法 无法在web xml或使用此应用程序部署的jar文件中解析绝对uri xff1a http java sun com jstl core 一 问题的产生 在javaweb项目中引入了 jstl
  • 500、1000

    上周日 xff0c 是我参加工作整整 1000 天 xff0c 确实没想到 xff0c 我都已经混迹职场这么久了 周一呢 xff0c 也是距离我写第一篇公众号文章的第 500 天 xff0c 确实也没想到写这么久了 两个相比较来说 xff0
  • 说实话,想家了

    想家了 这周最大的惊喜 xff0c 就是发现1月底该过年了 xff0c 好开心啊 xff01 毕业这几年是越来越恋家 xff0c 光是想想跟家人在一块的时光 xff0c 就美滋滋的 也许是这几年发生了太多事情 xff0c 前年爸爸车祸 xf
  • 恭喜“结业”啦

    之前报名的深圳市人工智能培训 xff0c 今天上完了最后一次课 xff0c 也考完试 xff0c 拿到结业证书啦 xff0c 哈哈 这个课程是人社局主办的 xff0c 有市级 区级的培训 个人觉得挺好 xff0c 带我简单的了解下人工智能的
  • 思考,分享

    不知不觉 xff0c 每周思考也陪我跨了个年 xff0c 本篇已经是第 22 周了 写 每周思考 时 xff0c 总能让我回想起很多事情 近段时间 xff0c 大部分精力都扑在工作上了 xff0c 工作日晚上回家 xff0c 也没有写文章的
  • Git代码提交,固定日志模板

    时间 xff1a 2022年1月9日21 38 22 团队开发 xff0c 但是每个人的日志风格不同该怎么办 xff1f 通过配置服务器的 Git 提交日志 xff0c 就可以实现统一的代码提交风格 先看实现效果 xff0c 如下图 这样大
  • 《伤逝——涓生的手记》,读后有感

    看鲁迅先生的 狂人日记 有一段时间了 xff0c 其中有一短篇 xff0c 名叫 伤逝 涓生的手记 xff0c 有一些浅显的思考 xff0c 分享给大家 xff0c 可以互相讨论学习 x1f37b 参考资料 xff1a 百度百科 伤逝 xf
  • 我的2021

    牛年的事情 xff0c 肯定要在牛年结束 现在已经是 2022 年的一月份了 xff0c 才开始动笔 xff0c 写这份 2021 的年终总结 有两方面的原因 xff0c 一方面是觉得 12 月的时间太紧了 xff08 参加了培训班 xff
  • C/C++ 语言 printf 可以直接使用宏定义打印?

    hello xff0c 你好呀 xff0c 我是小二 在 编码 过程中 xff0c 小二发现一种神奇的用法 xff1a 打印时 xff0c 直接使用宏定义 xff01 于是小二决定自己尝试一把 1 基础环境 使用的在线编译器是这个 x1f4
  • Anaconda3安装教程记录

    参考资料 1 官网 xff1a https www anaconda com products individual 2 安装教程 xff1a https mp weixin qq com s ip8TQF2pyjLwEBixwoxxBw
  • Anaconda3修改默认环境保存路径

    参考链接 1 https blog csdn net javastart article details 102563461 配置方法 方法一 1 修改 C 盘 condarc 隐藏文件 xff1b 2 在文件末尾增加如下内容 envs d
  • javaweb servlet 在控制台上输出乱码的解决

    上午打开我的idea 正在愉快的写代码 xff0c 某段程序中需要servlet在控制台上打印一个消息 xff0c 一个悲催的故事发生了 xff0c 打印的中文字符全乱码了 难道是我的tomcat xff0c 没有设置吗 xff1f tom
  • Win10系统,使用VSCode提示错误fatal: detected dubious ownership in repository at

    1 环境信息 1 Win10 系统 2 VSCode 软件 2 问题现象 使用 VSCode 打开 Samba 中的 Git 工程时 xff0c Git 相关插件不会启用 xff0c 通过 git 输出界面 xff0c 可以看到有提示如下错
  • C++程序存在多个cin输入时,后边的cin失效

    1 参考资料 1 https www cnblogs com pengjun shanghai p 4800871 html 2 C 43 43 Primer Plus xff08 第6版 xff09 中文版 xff0c 第 4 2 5 小