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;
}
運作結果: