浅谈C++中字符串输入get与getline的区别
最近使用C++中自己老是忘记的一个点,get与getline的区别。
1、get与getline
get和getline所属iostream类,作用是读取一整行,通过换行符确定读取结束,他们都可以读取空格。
2、get与getline区别
getline会在读取结束后舍弃换行符,而get回将换行符保留到输入序列中。
char arr[100]; cout<<"输入一段文字:"<<endl; cin.getline(arr,20); //使用getline cin.get(arr,20); //使用get
get与getline有两个参数,第一个参数是用来存储的数组名称,第二个参数代表着读取的字节数。
输入:asdfg 回车
get:只读取asdfg不读取回车,会导致下一个读取输入时第一个读取“回车”。
getline:getline读取asdfg回车,并将回车转换为“\0”读取,所以最终读取的是“asdfg\0”输入序列中无回车,下一个读取将会正常读取。
3、如何解决get舍弃换行符而产生的影响
在cin.get(arr,20)使用完后插入“cin.get()”,cin.get()不接受任何参数,为get()的一个变体,意义为读取下一个字符(即使是换行符),用此代码来处理被舍弃的换行符。
即:
cin.get(arr,20); cin.get(); cin.get(arr,20);
或者可以将两段代码合为一段:
cin.get(arr,20).get();
以上所述是小编给大家介绍的C++中字符串输入get与getline的区别详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
相关推荐
-
详解C++ bitset用法
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间. 下面是具体用法 构造函数 bitset常用构造函数有四种,如下 bitset<4> bitset1; //无参构造,长度为4,默认每一位为0 bitset<8> bitset2(12); //长度为8,二进制保存,前面用0补充 string s = "100101"; bitset<10> bitset3(s); //长
-
详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存.(构造函数的命名必须和类名完全相同) 首先说一下一个C++的空类,编译器会加入哪些默认的成员函数 默认构造函数和拷贝构造函数 析构函数 赋值函数(赋值运算符) 取值函数 **即使程序没定义任何成员,编译器也会插入以上的函数! 注意:构造函数可以被重载
-
C++单例类模板详解
单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针) , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区别在于创建实例的时间不同: 懒汉式 : 指代码运行后,实例并不存在,只有当需要时,才去创建实例(适用于单线程) 饿汉式 : 指代码一运行,实例已经存在,当时需要时,直接去调用即可(适用于多线程) 用法 将构造函数的访问属性设置为private, 提供一个GetInstance()静态成员函数,只能供
-
C++中map和vector作形参时如何给定默认参数?
map和vector都可以用operator[]进行访问,map是用[]中的数据作为key进行查询,而vector是用[]中的数作为下标进行访问. 如果在用operator[]进行访问的时候出现了越界情况,即map没有这个键值对,或vector的大小小于下标数值,会发生什么情况? struct node{int a{5};}; int main() { map<string,node> m1; cout<<m1["s"].a<<endl; map&l
-
c++编程学习的技巧总结
1.把C++当成一门新的语言学习(和C没啥关系). 2.看<Thinking In C++>,不要看<C++编程思想>. 3.看<The C++ Programming Language>和<Inside The C++ Object Model>,不要因为他们很难而我们自己是初学者所以就不看. 4.不要被VC.BCB.BC.MC.TC等词汇所迷惑–他们都是集成开发环境,而我们要学的是一门语言. 5.不要放过任何一个看上去很简单的小编程问题--他们往往并不那
-
详解C++-二阶构造模式、友元
首先回顾以前所学的构造函数 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在定义时被自动调用 由于构造函数没有返回值不能判断执行结果,所以不能保证初始化对象能否成功 比如: class Test{ private: int *p; public: Test(int i) { p=new int(i); } } 假如创建对象时,执行new分配时失败了,便会出现bug,若代码量大,是很难找到这个问题的,这种便被称为半成品对象. 如何来避免半成品对象的诞生呢? 就要用到本章学的
-
C++多线程实现电子词典
本文实例为大家分享了C++多线程实现电子词典的具体代码,供大家参考,具体内容如下 // Dictionary.cpp : 定义控制台应用程序的入口点. //vs2013编译 //字典文件:https://pan.baidu.com/s/1YHtwptaq_V8j034U9_J96A #include "stdafx.h" #include <string> #include <vector> #include <iostream> #include
-
详解C++ string字符串类
C++字符串string类 在C语言里,字符串是用字符数组来表示的,而对于应用层而言,会经常用到字符串,而继续使用字符数组,就使得效率非常低. 所以在C++标准库里,通过类string从新自定义了字符串. 头文件: #include <string> string直接支持字符串连接 string直接支持字符串的大小比较 string直接支持子串查找和提取 string直接支持字符串的插入和替换 string同时具备字符串数组的灵活性,可以通过[ ]重载操作符来访问每个字符. 字符串数组和str
-
C++实现单置换密码
单表置换密码的C++代码实现,供大家参考,具体内容如下 本程序使用方法:需要在本程序所在的文件夹创建一个"密码学.txt"文档. 该程序所需要的数据全部由该文档提供,然后运行即可得到结果,如需要修改数据,必须从文档中人工修改 文档格式的要求:文档总共包含两行.第一行由一个1或2的数字和一个字符串组成,数字1代表加密,2代表解密,字符串表示密钥 第二行仅包含一个字符串,这个字符串是需要加密或解密的内容. 该程序运行结果直接由控制台输出 运行结果: 代码: #include<iost
-
c++11中关于std::thread的join的详解
std::thread是c++11新引入的线程标准库,通过其可以方便的编写与平台无关的多线程程序,虽然对比针对平台来定制化多线程库会使性能达到最大,但是会丧失了可移植性,这样对比其他的高级语言,可谓是一个不足.终于在c++11承认多线程的标准,可谓可喜可贺!!! 在使用std::thread的时候,对创建的线程有两种操作:等待/分离,也就是join/detach操作.join()操作是在std::thread t(func)后"某个"合适的地方调用,其作用是回收对应创建的线程的资源,避
随机推荐
- Delphi实现限定软件使用时间的方法
- javascript动态添加样式(行内式/嵌入式/外链式等规则)
- jquery.form.js框架实现文件上传功能案例解析(springmvc)
- Js 实现表格隔行换色一例
- bit,bytes 是什么意思?
- 在Windows平台下安装与配置Memcached的方法分享
- Oracle Arraysize设置对于逻辑读的影响实例分析
- ASP.NET MVC中图表控件的使用方法
- Summernote实现图片上传功能的简单方法
- js Map List 遍历使用示例
- 如何迅速成为Java高手
- Android编程之简单逐帧动画Frame的实现方法
- js 获取元素所有兄弟节点的实现方法
- 使用Firebug对js进行断点调试的图文方法
- 五个PHP程序员工具
- ASP 环境下 VBS 事件应用 示例代码
- VBS教程:方法-GetFileName 方法
- 网络传输协议(http协议)
- JavaScript 数组some()和filter()的用法及区别
- JavaScript事件学习小结(二)js事件处理程序