基本原理:
一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。当输入缓冲区中没有数据时,会请求键盘输入;否则,不会请求。
一、cin>>
输入结束条件:遇到enter,space,tab字符;
读取时对字符的处理:会自动跳过enter,space,tab字符;
结束时不会丢弃结束字符。
测试:
#include<iostream> using namespace std; int main() { char c1,c2,c3; cin >> c1; cin.get(c2); cout << c1 << endl; cout << c2 << 1 << endl; return 0; }
结果:
分析:输入1(enter),cin>>读取字符1,cin.get()读取换行符,输出时先输出1,再换行,再输出1,再换行。
二、cin.get()和cin.get(数组名,长度,结束符)
cin.get();
char ch = cin.get()等价于cin.get(ch)。可以用来获取任意字符,包括enter,space,tab。
读取字符:
输入结束条件:无;
读取时不跳过任何字符,单个读取;
结束时不丢弃字符。
测试:
#include<iostream> using namespace std; int main() { char ch1,ch2; cin.get(ch1); cin.get(ch2); cout<<ch1<<endl; cout<<ch2<<2<<endl; return 0; }
结果:
分析:cin.get(ch1)读取了字符1,cin.get(ch2)读取了换行符。
cin.get(数组名,长度,结束符):
结束符为可选参数,读入的字符个数最多为长度-1个,结束符规定结束字符串读取的字符,默认为enter。
输入结束条件:结束符或者输入大于指定长度-1时;
读取时对字符的处理:不跳过空格,tab,enter,读取长度小于指定长度-1的字符,直至遇到enter结束;
结束时不丢弃任何字符。
测试:
#include<iostream> using namespace std; int main() { char ch,a[5]; cin.get(a,5); cin.get(ch); cout<<a<<endl; cout<<(int)ch<<" "<<1<<endl; return 0; }
结果1:
分析:
输入1234(enter),读取时读到enter字符时已经是第五个了,所以结束,读ch时读的是enter。
结果2:
分析:
假如直接按enter,会结束读取字符串a,但是这个时候ch的值并不是10,而是0,enter貌似被丢弃了。。。
三、cin.getline()
cin.getline(数组名,长度,结束符) 大体与 cin.get(数组名,长度,结束符)类似。
区别在于:
cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。
cin.getline()是以enter为结束标志的,同时丢弃了enter。
测试:
#include<iostream> using namespace std; int main() { char ch,ch2,a[5]; cin.getline(a,4); cin.get(ch); cin.get(ch2); cout<<a<<endl; cout<<ch<<endl; cout<<ch2<<1<<endl; return 0; }
结果:
分析:
输入123(enter),读取123,遇到enter,结束读取字符串,同时丢弃enter,接着读入1和enter,输出时先输出字符串123,再输出1和enter,再输出1。