C++標準輸入流對象cin需重點掌握的函數
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;
}
運行結果: