c++控制台输入
来源:互联网 发布:手机运行电脑软件 编辑:程序博客网 时间:2024/06/11 05:00
当在控制台输入数据时,所有的数据都是输入到缓冲区的,当从其中提取数据时,也是从缓冲区提取的!其有一个指向缓冲区的指针,就是通过此指针对数据提取的。
例如cin>>a;就是通过>>的重载实现从缓冲区取出数据并进行相应的转换后赋值给a;如果缓冲区没有数据的话,则等待用户输入数据。
1.对于从控制台读入数据到数据结构中,主要要了解的是:
- 1,读入的数据是什么(尤其针对字符串,是否包括空格,换行符等)。
- 2,读入数据后缓冲区的指针指向什么位置(缓冲区都指向读入数据的下一位)
通常读入的数据可以分为两种,一种是数值数据,例如int,float等。另一种是字符数据,包括单个字符和字符串。
对于数值数据,直接将数据读入到相关的数据结构中即可。指针指向数据的后一位。可以指向换行符!
对于字符数据,如果是单个字符读入的话,类似数值数据。也可以指向换行符!
对于字符数据,如果是读入字符串的话,则针对存储类型有不同的实现机制:
1.如果用c风格的字符数组保存字符串,则字符串的结尾一定是会添加0作为结束符的
2.如果用string保存字符串,则结尾一定是不增加0的。
char a[100];
cin.getline(a,100);//读入一行数据,同时将数据存放在a字符数组中,末尾添0,同时换行符不存储。(指针指向下一行开始!如果没有数据了则设置指针读完eof。指针指向下一行很容易理解,既然是getline,自然是将此行数据全部读完了,那指针指向下一位自然是下一行开始。只是在存储时将换行符舍弃了而已)
2.console程序中,按下enter键,输入数据进入缓冲区,后面的取数据操作都是在缓冲区中进行的。
对于各种输入函数作如下整理:
- cin>>a;从缓冲区中取数据赋值给a,遇到空格,tab,enter结束。当a是字符串时,在a末尾添加0.(如果字符串长度>=a.len,最后一位不输入数据,输入0)
- cin.getline(s,20,'\n');给s赋值,遇到enter结束,不保存enter,同时在s末尾添加0(如果字符串长度>=20,最后一位不输入数据,输入0),也就是说s有效长度最多19,必须以0结尾。
- getchar();从缓冲区中获取一个字符,可以是任何字符,包括空格,tab,enter等。
- getch();直接用户在屏幕中输入一个字符,其就返回一个字符,不从缓冲区中取,其是针对屏幕的。
- gets();从缓冲区读入字符串,当遇到enter时结束,不保存enter。遇到空格,tab保存,同时继续向后字符串末尾也补0.
- scanf();根据参数形式确定了最终的赋值情况。
- scanf("%d,%d",&a,&b)则屏幕应该输入10,20
- scanf("%d%d“,&a,&b)则屏幕输入10 20 或者10 tab 20 或者10 enter 20
- 当输入为字符串时,不读取enter,‘ ’,tab,末尾补0,但是读取‘ ’和tab,当输入字符时,读取enter('\n')
3.对于接收从控制台输入的数据,可以采用如下规则:
1,对于行数不固定的输入,只需要有行输入结束的判断即可,由于行结束输入了,整个输入也就结束了,所以可以直接利用cin来判断,当整个输入结束时,cin 为false
2.,对于每一行的数据,如果数据的个数和数据的类型确定的话,则可以用cin>>a>>b...等方式来进行读入数据。
3,对于每一行的数据,如果行数据个数不固定,则在接收数据的同时需要判断行结束标志:可以采用如下两种处理方式:
- 对于数据间有空格的数据,可以用cin.get() != '\n'来持续输入:例如 123 ab 34 cd 334 def
- 对于数据间没有空格的输入,可以用stringstream来。例如123a34b324c
4.stringstream的使用注意点:
1.每次使用stringstream之前都要调用clear()函数清空。
2.stringstream是否结束是采用eof()函数来判断的,而不是像cin一样用此对象本身来判断,例子:
#include <iostream>#include <sstream>using namespace std;string s;stringstream ss;int a;char c;while(getline(cin,s)){//s = 123A23B234C......ss.clear();ss<<s;while(!ss.eof()){ss>>a>>c;}}5.读入单个字符的方法:cin.get(c);或者cin.get(),其返回值为char.
读入一行字符的方法cin.getline():其是iostream中的函数。getline(cin,s):其是stl中的函数.
1,char c[100]; cin.getline(c,100)//数据保存在字符数组中,如果字符数组开辟的小于一行的输入的话则会丢失相关数据
2,string s; getline(cin,s);//数据保存在字符串中,不存在1中的问题。
6.cin>>的使用:从缓冲区指针处开始,跳过空白符(空格,tab等)和换行符,取相关数据到变量中,直到遇到下一个空白符(空格,tab等)和换行符,结束。
如果数据无法转换,则cin返回false(cin返回false除了输入结束外,还有输入出错的情况!!)
string a;cin>>a;从缓冲区指针处开始,按照上面说明的方法,取数据放入a中。
int b;cin>>b;同上
char c[100];对于c风格的字符数组,方法同上,只是字符数组的最后都会自动补0的。
- C/C++ 控制台输入
- C 语言控制台输入
- 【C】控制台限时输入控制。。
- C#-向控制台简单输出输入
- Linux C解析控制台输入命令行参数
- C语言中接受控制台的输入
- C语言控制台的输入与输出
- 控制台输入
- JNI调用C/C++方法从控制台输入密码
- C语言之路 第十一章 控制台输入/输出
- C/C++ 获得控制台输入的3种方法
- 控制台程序输入CTRL+C后弹出异常的原因
- C语言控制台程序输入字符接收处理
- 第一章,控制台的输入和打印(C++)
- C++输入(1):控制台输入
- Java控制台输入,输出!
- Java 控制台输入
- Java控制台输入
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- 微软安全团队对windows phone8 安全的认识
- xcode快捷键
- IE8的 JS 引擎如此不堪?
- VS2005到VS2012的IDE导入外部库的方法
- c++控制台输入
- vlc-android编译
- 如何查看存储过程的定义 (SQL Server Management Studio)
- Ubuntu 13.04系统更新后状态栏消失解决
- 在asp.net中javascript ajax的运行过程详讲(非jquery的ajax)
- 变量申明与定义
- 读《黑客与画家》--关于创业问题的思考
- 从零开始?!
- 孙鑫VC++深入详解:Lesson6 Part5--- 给自建的动态子菜单配置COMMAN消息响应函数