C++标准输入流对象cin需重点掌握的函数
-
- 1. cin.get()
- 2. cin.getline()
- 3. cin.ignore()
- 4. cin.peek()
- 5. cin.putback()
1. cin.get()
cin.get()
一次只能从缓冲区拿走一个字符
void test01(){
// 输入as 缓冲区中 a s 换行 第一个拿 a 第二个 拿 s 第三次拿换行 第四次等待下次输入
char c = cin.get();
cout << "c = " << c << endl;
c = cin.get();
cout << "c = " << c << endl;
c = cin.get();
cout << "c = " << c << endl;
c = cin.get();
cout << "c = " << c << endl;
}
运行结果:
cin.get(两个参数)
可以拿取字符串,不会把换行符拿走,遗留在缓冲区中
void test02(){
//cin.get(两个参数) //可以读字符串
char buf[1024];
cin.get(buf, 1024);
char c = cin.get();
if (c == '\n'){
cout << "换行还在缓冲区" << endl;
}
else{
cout << "换行不在缓冲区" << endl;
}
cout << buf << endl;
}
//cin.get(两个参数)读取字符串时,不会把换行符拿走,遗留在缓冲区中
运行结果:
2. cin.getline()
语法:
cin.getline(字符指针(char*),字符个数N(int),结束符(char));
此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为换行符,此函数并不保留结束符,它通过结束符确定结束,但不保存结束符,它用空字符来替换结束符。
void test03(){
char buf[1024];
cin.getline(buf, 1024);
char c = cin.get();//如果把换行符也读取了,缓冲区没有数据,此行代码会阻塞,等待输入
if (c == '\n'){
cout << "换行还在缓冲区" << endl;
}
else{
cout << "换行不在缓冲区" << endl;
}
//cin.getline 把换行符读取,并且扔掉
}
运行结果:
3. cin.ignore()
cin.ignore();
没有参数 代表忽略一个字符 ,带参数N,代表忽略N个字符
void test04(){
cin.ignore(2); //没有参数 代表忽略一个字符 ,带参数N,代表忽略N个字符
char buf[1024];
cin.getline(buf,1024);
cout << "buf = " << buf << endl;
}
4. cin.peek()
cin.peek()
获取一下第一个字符,然后再放回缓冲区
void test05(){
//输入as 偷看一眼 a,然后再放回缓冲区 缓冲区中还是as
char c = cin.peek();
cout << "c = " << c << endl;
c = cin.get();
cout << "c = " << c << endl;
}
运行结果:
5. cin.putback()
cin.putback()
将字符放回到输入流中
void test06(){
char c = cin.get();
cin.putback(c);
char buf[1024];
cin.getline(buf,1024);
cout << buf << endl;
}
运行结果: