要点
- cin>>
最常见的是获取输入的一个字符或数字。cin>>会自动过滤掉不可见字符(如空格、换行、回车等) - get(c)
用来接收字符,只获取一个字符,可以接收空格、换行、回车,遇回车结束。 - cin.get(数组名,接收字符数目)
用来接收字符串,可以接收空格,遇回车结束。由于字符串最后一个字符是'\0',所以当输入中超过len-1个字符时,实际只能接受len-1个字符。 - cin.get()
没有参数。主要用于舍弃输入流中不需要的字符,或者舍弃回车,即舍弃输入流中的一个字符。 - cin.getline(接收字符串到m,接收个数n,结束字符)
接收一个字符串,可以接收空格等,最后一个字符为‘\0’。结束符可以通过设置第三个参数自己设置,默认是回车。m不能为string类型。 - cin.peek()
其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF( - 1)
int main() {
char c;
char buf[10];
c = cin.peek();
if (c > '0'&&c < '9') {
cin >> buf;
cout << buf << endl;
}
else {
cout << "first char is not number" << endl;
}
}
- cin.putback()
作用是将前面用get或者getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针的位置,供后面读取。
int main() {
char c;
char buf[10];
cout << "input word:" << endl;
c = cin.get();
if (c > '0'&&c < '9') {
cin.putback(c);
cin >> buf;
cout << buf;
}
else {
cout << "first char is not number" << endl;
}
return 0;
}
示例
#include "iostream"
using namespace std;
int main()
{
char a, b, c;
//cin>>会过滤不可见字符(空格、回车、换行)。
cin >> a >> b >> c;
cout << "a=" << a << ",b=" << b << ",c=" << c << endl;
char buf[10];
cin >> buf;
cout <<"[cin >> buf]="<< buf << endl;
char d;
//接收一个字符
cin.get(d);
cout << "[get(d)]=" << d << " "<<(int)d<<endl;
//舍弃流中的一个字符(包括空格、回车、换行)
cin.get();
//用来接收字符串,可以接收空格,遇回车结束。
//数组的最后一个字符会是‘\0’
cin.get(buf,10);
cout <<"[cin.get(buf,10)]=" <<buf << endl;
//cin.getline(接收字符串到m,接收个数n,结束字符)。
//可以接受(空格、回车、换行)
cin.getline(buf, 10);
cout <<"getline(buf, 100)="<< buf << endl;
return 0;
}
测试结果
输入方式,这里为了区分开始和结束,使用[ ]来演示,而不是输入内容
- [ 1 2 3 回车]
这时候1,2,3分别设置到了a,b,c中。证实了<<会过滤掉不可见字符 - [4 回车]
- buf的内容为4;
- cin.get(d)后,d的结果为空格(从ASCii值可知);
- cin.get()吸收了回车;
- [123456789123]
- get(buf,10)后buf的内容为123456789说明只能接受10-1个字符,最后一个为'\0'。
- getLine(buf,10)接收剩余的字符。