0、#include
(1)istream cin; //定义一个输入类对象
cin:标准输入类对象占用一定的内存空间
cin>>a; (运算符重载)
功能:用于从标准的输入设备中获取内容并且保存到指定内存中
特点:可以用于获取不同数据类型
可以用于连续输入,不过用"空格" "/" "Enter"来分隔 //cin>>a>>b;
不可以在后面加上endl;
cin可以调用方法
cin如果想要获取不确定字符串内容,不要采用自定义数据形式
(2)get方法
class istream
{
//定义一个get方法
int_type get();
__istream_type&get(char_type&__c); //get函数传参不一样,个数不一样,可以同名
__istream_type&get(char_type*__s,streamsize__n,char_type__delim);
__istream_type&get(char_type*__s,streamsize__n);
.......
}
函数重载
1、cin.get()
它是一个读取单个字符方法。字符变量=cin.get =>cin.get(字符变量)
#include
using namespace std;
int main()
{
char str;
str = cin.get();//cin.get(str);
cout<
systerm("pause"); //进行停止,否则会一闪而过
}
既然cin.get()是读取第一个字符,那str2为什么不也是a呢?
原理如下:
在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,事实上是cin里封装的一个东西.当我们在程序上输入字符后,对象cin获得了我们输入的字符。例如获得abcd,然后再通过.get()把流里面的第一个字符去掉,赋给str1,这时,cin里储存的流的数据为bcd,而str1则获得了a。当我们再次运行str2 = cin.get()时,同理把cin里流的数据的b拿出来给了str2,此后,cin里面的流的数据为cd,而str2则为b,所以最后输出时,便能输出ab了。
还有个补充,究竟什么时候才输入数据呢?我们可以再通过上面的代码进行尝试,我们输入单个字母'a',然后按回车,发现并没有输出数据,而是再等待一次输入数据,我们再输入字母'b',按回车后便输出ab了。相信到这里,大家都应该明白了,因为当我们第一次输入a后,通过str1 = cin.get()使cin里的流没有数据,清空了。所以到第二次要再赋给str2值时,它找不到数据,要重新再输入数据。由此来看可以知道,当cin里的流数据清空时,便需要重新输入才能赋值。而cin.get()还有个用法:
运行程序后
输入:abcd 输出:ac
程序中有3个cin.get(),由此可知,当空回调cin.get()时,cin.get便自动在cin中的流数据中删除一个字母,起了一个删除作用。
对cin.get()有了一定了解之后,对cin.getline()的学习就可以更快了,原理是一致的,但是cin.getline()则是获取一整行文本。以下是cin.getline()原形:
getline(char *line,int size,char='/n')
第一个是字符指针,第二个是字符长度,第三个为结束标识符。
函数作用:从标准输入设备键盘读取一串字符串,并以指定的结束符结束。
1)__istream_type&getline(char_type* __s, streamsize __n)
2)__istream_type&getline(char_type*__s,streamsize__n,char_type__delim);
3)__istream_type&getline(char_type* __s, streamsize __n)
{ return this->getline(__s, __n, this->widen('\n')); }
.......
#include
using namespace std;
int main()
{
cout << "Hello World!" << endl;
char cstr[20];
cin.getline(cstr,sizeof(cstr),'x');
cout < system("pause");return 0;}输入:abcdx (enter键) 输出:abcdabx(enter键) ab
xabc
3、cin.gount()
从缓冲区中读取数据,输出(数据)数组的字节数,与cin.get/cin.getline搭配使用
streamsize gcount() const { return _M_gcount; }#include#includeusing namespace std;int main(){cout << "Hello World!" << endl;char cstr[20];cin.getline(cstr,10); //从数组中读取十个字节cout < cout < system("pause");return 0;}输入:abcdefghlip输出:abcdefghl
9 // 从缓冲区中读取数据,返回数据的字节数。还有最后是结束符,不算入字节数
4、cin.ignore()
cin.ignore(a,ch)方法是从输入流cin中提取字符,提取的字符被忽略,每抛弃一个字符,它都要计数和比较字符:如果字符值达到a或者被抛弃的字符是ch,则函数执行终止。否则它继续等待。
功能:用来清除以回车键结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
cin.ignore(1024,'\n');通常把第一个参数设置足够大,这样实际上总有只有第二个参数‘\n’起作用。
int a,b,c;cout<<"input a:";cin>>a;
cin.ignore(1024,'\n');cout<<"input b:";cin>>b;
cin.ignore(1024,'\n');cout<<"input c:";cin>>c;
cout<"\t"<"\t"< return 0;如果没有cin.ignore(),可以一次输入3个参数,用空格隔开就行,但是不美观。cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即是把EOF前的一个字符清除,EOF是文件结束标志。
5、cin.readsome()VScin.read()
__istream_type&read(char_type* __s, streamsize __n);//读取指定数组字符streamsizereadsome(char_type* __s, streamsize __n);//读取指定数组字符的字节数
6、cin.unget()