C++ cin详细用法
测试环境:VS2013+win32+debug
在工作过程中,发现cin的结束符根据不同的成员函数会存在是否被处理的情况,再次进行记录验证。
1、cin获取缓冲区数据
常用方法包括cin>>, cin.get, cin.getline,getline
cin>>
cin是从键盘中读取想要的数据,以空格,tab以及换行作为结束符。
测试代码:
#include<iostream>
#include<string>
using namespace std;int main(){char a;int b;double c;string d;cin >> a >> b >> c >> d;cout << a << " " << b << " " << c << " " << d << endl;system("pause");return 0;
}
运行上述程序
我们可以看到运行结果如下:
在这里需要特别注意的是,
1、cin在检测到实际有效的数据,即非结束符数据时,会忽略数据前所有的结束符等待实际有效数据。
2、读取到有效数据后,之后的结束符cin不会进行处理,而是把它留在缓冲区,由之后的读取操作进行处理,之所以cin连续的时候,不会出现结束符异常问题。是因为之后的cin会忽略掉之前留下的结束符。
3、如果不想忽略空白字符使用noskipws,noskipws 可以做到不忽略任意地方的空格。std::cin >> std::noskipws >> c1 >> c2 >> c3 >> c4;
cin.get
函数原型:
1、int cin.get();2、istream& cin.get(char& var);3、istream& get ( char* s, streamsize n );4、istream& get ( char* s, streamsize n, char delim )。
其中3和4的差别在于是否可以人为指定结束符,char delim.
单个char:
测试程序(1,2一起测试):
#include<iostream>
#include<string>
using namespace std;int main(){char a;char b;a = cin.get();cin.get(b);cout << a << " " << b << endl;system("pause");return 0;
}
结果:
从上面可以看出,
1、cin.get()并没有忽略结束符,而是直接进行了读取,所以出现了上面只输入了一个字符a,然后回车,程序就执行完成的情况。
2、cin.get()的返回值是int类型,成功则返回读取字符的ASCII码值,遇到文件结束符时,返回EOF,即-1。
3、cin.get(char var)如果成功返回的是cin对象,因此可以支持连续操作,如cin.get(b).get©
字符数组:
测试程序:
#include<iostream>
#include<string>
using namespace std;int main(){char a[20];char b; char c[20];cin.get(a,20);cin.get(b);cin.get(c, 20, '7');cout << a << " " << b << " " << c << endl;system("pause");return 0;
}
运行结果:
从结果我们可以看出,
1、cin.get()的3和4原型在于结束符的人为设定。
2、cin.get()在读取字符数组的时候,仍然不会处理结束符。所以出现,输入完a之后,在进行输入,程序终止。
3、istream& get ( char* s, streamsize n );与cin.getline()功能类似。
cin.getline()
函数原型:
1、istream& getline(char* s, streamsize count); //默认以换行符结束
2、istream& getline(char* s, streamsize count, char delim);
测试程序:
#include<iostream>
#include<string>
using namespace std;int main(){char a[20];char b[20];cin.getline(a, 20);cin.getline(b, 20);cout << a << " " << b << endl;system("pause");return 0;
}
结果:
从结果可以看出:
1、cin.getline()。不会把结束符留下来,而是直接在本次输入完成后,就处理掉了。
getline
测试程序:
#include<iostream>
#include<string>
using namespace std;int main(){string test;getline(cin, test);//不阻塞cout << "test:" << test << endl;system("pause");return 0;
}
结果:
可以看出:
1、getline();并不会忽略结束符,而是直接进行读取。
cin清空输入缓冲区
cin在使用过程中,因为结束符导致的问题很多,所以可以通过清空缓冲区的方式来去除影响。
函数原型:
istream &ignore( streamsize num=1, int delim=EOF );
函数的作用,是跳过num的字符或者遇到delim终止字符时提前结束。
测试程序:
#include<iostream>
#include<string>
using namespace std;int main(){char a[20];char b[20];cin.get(a, 5);cin.ignore(numeric_limits<std::streamsize>::max(), '\n');cin.get(b, 20);cout << a << " " << b << endl;system("pause");return 0;
}
结果:
由结果看出:
1、程序中使用cin.ignore()成功的去除掉了之前的结束符,从而使我们的cin.get()成功完成读取,其中,numeric_limitsstd::streamsize::max()代表的是最大值,可以使用任意整数代替。如果清空整个缓冲区,可以使用cin.ignoer(numeric_limitsstd::streamsize::max()).
2、cin.ignore()如果缓冲区没有数据的话,会阻塞等待数据的到来。
但是从上面我们看到,我们最初输入的12345,却没有完整打印,这是因为我们限定了长度5,但是同时需要预留结束位“\0”,之后的5和换行符被留在缓冲区。
C++ cin详细用法相关推荐
- C++中 cin 的详细用法
1.cin 简介 cin是C++编程语言中的标准输入流对象,即istream类的对象.cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘.此外,cout是流的对象,即ostream类的 ...
- C++ ofstream和ifstream详细用法
ofstream 和 ifstream 详细用法 导读 一.打开文件 二.关闭文件 三.读写文件 1.文本文件的读写 2.二进制文件的读写 四.检测EOF 五.文件定位 格式化输入输出: 1 整数数据 ...
- c语言ofstream,C++ ofstream跟ifstream详细用法以及C语言的file用法
C++ ofstream和ifstream详细用法以及C语言的file用法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个strea ...
- Android命令行工具logcat详细用法!
logcat是Android中一个命令行工具,可以用于得到程序的log信息. 见板凳详细说明! 本贴内容来自网络,引用网址为:http://hi.baidu.com/%C9%C1%D2%AB ...
- __declspec关键字详细用法
__declspec关键字详细用法 2009-01-21 16:23 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与ext ...
- mysql left/right join算法效率分析_mysql left join,right join,inner join超详细用法分析
MySQL left join,right join,inner join超详细用法分析 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 ...
- python sort怎么用,Linux Sort命令详细用法(有实例)
Linux Sort命令详细用法(有实例) sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! Linux sort命令进阶: 1 sort的工作原理 so ...
- vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn
vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn 原创ChrisWang_ 最后发布于2019-05-24 10:25:58 阅读数 1332 收藏 展开 vue性 ...
- oracle rtrim(),Oracle ltrim() rtrim() 函数详细用法
嘿嘿,今天在论坛里看了一篇帖子,讨论ltrim() 函数的详细用法,下面我借几个高手的回答总结一下: 先看几个实例: SQL> select ltrim('109224323','109') f ...
最新文章
- 批量修改文件权限 和所有者 chown nobody:nobody * -R chmod 775 * -R
- python编程案例教程答案-Python程序开发案例教程
- 统一建模语言(UML)介绍
- 列字段通用excel导入修改版
- Subject 在 SAP Spartacus Popover Component 中的应用
- 利用S_MEMORY_INSPECTOR分析内存泄漏问题
- leetcode145. 二叉树的后序遍历 意想不到的骚操作
- html checked属性值,HTML复选框的checked属性的值是多少?
- shell死循环(whilefor)
- sever client
- linux性能分析top iostat vmstat free,Linux性能分析工具(vmstat,iostat,sar)
- html网页框架案例代码,HTML网页框架代码
- IOS OpenGL ES 图像扩展边缘彩色模糊 GPUImageRGBDilationFilter
- C语言实现多人坦克大战
- Install Mysql MMM On Redhat6.3
- 【C#】 .NET Reflector 安装与学习
- InnoDB:page_cleaner:1000ms intended loop took [xxx]ms解决
- 诺基亚结盟微软走上ARM星光大道
- TCP/IP:使用wireshark进行网络数据分析
- 刺激战场电脑版android,绝地求生刺激战场怎么用电脑玩 绝地求生刺激战场pc版安装攻略...