当前位置: 首页 > news >正文

关于c++的通过cin.get()维持黑框的思考

1.前言

由于本科没有学过c语言,研究生阶段接触c++上手有点困难,今天遇到关于通过cin.get()来让黑框维持的原因。

2.思考

cin.get()维持黑框不消失的原因一言蔽之就是等待输入。等待键盘的输入内容并回车(一般是回车)后cin.get()才能结束,然后黑框也随之消失。

2.1 从键盘输入

使用输入操作符读取单词,标准库中提供了iostream,可以使用内置的cin对象,调用重载的输入操作符>>来读取键盘输入。

	string str;//  读取键盘输入,遇到空白符停止cin >> str;cout << str<<endl;

这种方式的特点是:忽略开始的空白符,遇到下一个空白符(空格、回车、制表)等就会停止。所以如果我们输入“hello world”,那么读取给str的只有“hello”:因为hello后面是空格,属于空白符,所以停止。这相当于读取了一个“单词”。
剩下的内容“ world”其实也没有丢,而是保存在了输入流的“输入队列”里。如果我们想读取更多的输入信息,就需要使用更多的string对象来获取:

	string str1, str2;cin >> str1 >> str2;cout << str1 << str2 << endl;

这样,如果输入“hello world”,就可以输出“helloworld”。虽然空格还在读取hello后的输入流中,但是str2的读取忽略了world之前的空格

接下来看这里的代码

	string str1;cin >> str1;cout << str1 << endl;cin.get();cin.get();

运行效果是输入hello后输出hello,同时黑框仍然保持存在,即等待输入
在这里插入图片描述
我们输入的内容是hello,但是我们在hello后有一个回车符,读给str1的内容为hello
这里为什么要写两个cin.get():第一个用来处理之前保留在输入队列的回车符;第二个用来等待下一次输入,让窗口保持开启状态。
接下来继续:
以如下代码为例:

#include<iostream>
using namespace std;
//cin以空白字符串为结束:空格、回车、制表
int main() {string str1;string str2;cin >> str1;cout << str1 << endl;cin.get();cin >> str2;cin.get();cout << str2 << endl;cin.get();//cin.get();//cin.get();
}

在这里插入图片描述
该过程大体如下:

标准库中提供了iostream,使用内置的cin对象,调用重载操作符>>来读取键盘输入。
我们输入hello并回车,此时输入流中就有了:hello和回车符
将hello读取给str1,此时输入流还剩下回车符
第8行代码输出str1的内容
第9行代码中,使用cin.get()获取输入流的内容,读取了回车,返回空行。
第10行代码,继续cin对象重载>>读取键盘输入,并将输入内容给str2
我们输入say加上回车
str2的内容为say,因为say后面是空白符
输入流中还剩下回车
第11行代码使用cin.get()获取输入流中的回车符
第12行代码,输出str2的内容say
第14行代码 cin.get()等待下一次输入,如果不输入内容并回车的话,窗口一直保持

总结一下:

1.空白符:包括空格,回车,制表符等
2.cin>>str是获取键盘输入,遇到空白符停止,将内容给str,剩下的部分仍然在输入流中
3.cin.get()获取输入流中的内容,可以读取空白符
4.cin>>str1>>str2>>str3等此类使用多个str对象,他会忽略开始的空白符,遇到下一个空白符(空格、回车、制表等)就会停止,将该部分中间的内容依次传给str.例如 我们输入 “say hello world” 那么str1就是say,str2就是hello,因为他会忽略hello前的空格和后的空格,同理str3是world,他会忽略world前的空格和后的回车符

拓展:
对于代码

	string str1;cin >> str1;cout << str1 << endl;cin.get();cin.get();

如果我们输入的内容是 hello然后空格,然后回车,那么黑框会保持吗?答案是不会的,因为str1存储输入流的hello,第一个cin.get()获取输入流的空白符:空格,返回空行,第二个cin.get()获取输入流的回车符,返回空行,没有cin.get()继续等待输入了
如果写成

	string str1;cin >> str1;cout << str1 << endl;cin.get();cin.get();cin.get();

则可以保持黑框等待输入

http://www.lryc.cn/news/356381.html

相关文章:

  • fastadmin接口输出图片 自动拼接网站URL
  • VMware Workstation 不可恢复错误:(vmui) 错误代码0xc0000094
  • DockerNetwork
  • QT学习(20):QStyle类
  • hadoop学习之MapReduce案例:输出每个班级中的成绩前三名的学生
  • 【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
  • 学习thinkphp的循环标签
  • 根据标签名递归读取xml字符串中element
  • Ovid医学库文献如何在家查找下载
  • 在已创建的git工程中添加.gitignore
  • MR混合现实情景实训教学系统在临床医学课堂上的应用
  • 就说说开一家公司的流程和成本
  • 【前端】面试八股文——数组扁平化的实现
  • 2005-2022年各省全体居民人均可支配收入数据(无缺失)
  • JVM调优,何时调优,怎么调优,面试的时候调优
  • 朗之万动力学(Langevin dynamics)
  • 双指针技巧,链表
  • 鸿蒙 DevEcoStudio:发布进度条通知
  • web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite
  • Raven2掠夺者2渡鸦2角色创建、游戏预下载、账号怎么注册教程
  • Window VScode配置Conda教程(成功版)
  • 探索旅行的优惠之选,千益畅行旅游卡让旅程更省心省力!
  • JVM学习-彻底搞懂Java自增++
  • 【全开源】民宿酒店预订管理系统(ThinkPHP+uniapp+uView)
  • 9.3 Go语言入门(变量声明和函数调用)
  • CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)
  • 代码随想录——左叶子之和(Leetcode404)
  • 解禁谷歌等浏览器禁止网站使用麦克等媒体设备
  • 如何彻底卸载sql sever2022
  • 「51媒体」如何与媒体建立良好关系?