文章目錄
- 一、cin.ignore() 函數
- 1、cin.ignore() 函數簡介
- 2、cin.ignore() 函數原型
- 3、代碼示例 - cin.ignore() 函數
- 二、cin.peek() 函數
- 1、cin.peek() 函數簡介
- 2、代碼示例 - cin.peek()
- 三、cin.putback() 函數
- 1、cin.putback() 函數簡介
- 2、代碼示例 - cin.putback()
一、cin.ignore() 函數
1、cin.ignore() 函數簡介
C++ 中 標準輸入流 的 cin.ignore() 函數 用于從 輸入流中 忽略 一個或多個字符 ;
cin.ignore() 函數 使用場景 : 在 處理輸入流時 忽略掉不需要的字符或者數值 , 如 : 在讀取特定字符之前的所有字符 , 或者 在讀取整數值時忽略掉逗號或空格等分隔符 ;
2、cin.ignore() 函數原型
cin.ignore() 函數原型 :
istream& ignore(int count = 1, int delim = EOF);basic_istream& __CLR_OR_THIS_CALL ignore(streamsize _Count = 1,int_type _Metadelim = _Traits::eof())
{ // ignore up to _Count characters, discarding delimiter
-
參數解析 :
- count 參數 : 表示要忽略的字符數量 , 默認值為1 ;
- delim:表示停止忽略的條件,默認值為 EOF , End Of File , 表示文件結束 ; 也就是說,默認情況下 , cin.ignore() 會一直忽略字符 , 直到遇到文件結束符為止 ;
-
返回值解析 : 該函數返回一個引用到調用它的流對象,所以你可以把 cin.ignore() 鏈接到其他輸入流操作中。
使用 Ctrl + Z 組合按鍵 , 可以向命令行中輸入 EOF 字符 ;
3、代碼示例 - cin.ignore() 函數
在下面的示例中 , 在命令行中 , 使用鍵盤輸入 “hello world” ;
cin >> buf;
可以將空格之前的數據輸出到 buf 數組中 , 讀取 “hello” 到數據緩沖區中 ;
cin.ignore(3);
忽略掉 輸入緩沖區中 后面 3 個字符 , 空格以及 “wo” 字符被忽略 ;
cin.getline(buf2, 32);
將剩余的字符讀取到 buf2 數組中 , “rld” 字符被讀取到 buf2 緩沖區中 ;
代碼示例 :
#include "iostream"
using namespace std;int main() {char buf[32];char buf2[32];// 命令行中 , 使用鍵盤輸入 "hello world"// 將空格之前的數據輸出到 buf 數組中// 讀取 "hello" 到數據緩沖區中cin >> buf;// 忽略掉后面 3 個字符// 空格以及 "wo" 字符被忽略cin.ignore(3);// 將剩余的字符讀取到 buf2 數組中// "rld" 字符被讀取到 buf2 緩沖區中cin.getline(buf2, 32);// 輸出接收的數據cout << "buf=" << buf << endl;cout << "buf2=" << buf2 << endl;// 控制臺暫停 , 按任意鍵繼續向后執行system("pause");return 0;
};
執行結果 :
hello world
buf=hello
buf2=rld
請按任意鍵繼續. . .
二、cin.peek() 函數
1、cin.peek() 函數簡介
cin.peek() 函數 用于查看輸入流中的下一個字符 , 但并不從輸入流中提取這個字符 ;
cin.peek() 函數返回一個 char 類型的值 , 代表輸入流中的下一個字符 , 如果輸入流已經讀取到了結尾 , 或者沒有任何更多的數據 , 那么這個函數將返回 EOF , End Of File ;
2、代碼示例 - cin.peek()
下面的代碼中 , 輸入 “hello world” 字符 ,
讀取 緩沖區中的 “hello” 字符到 buf 數組中 , 然后再忽略 3 個字符 , 只剩下 “rld” 字符 ,
使用 peek 函數讀取第一個字符 ‘r’ , 小寫字母 r 對應碼表中的 114 ;
代碼示例 :
#include "iostream"
using namespace std;int main() {char buf[32];char buf2[32];// 命令行中 , 使用鍵盤輸入 "hello world"// 將空格之前的數據輸出到 buf 數組中// 讀取 "hello" 到數據緩沖區中cin >> buf;// 忽略掉后面 3 個字符// 空格以及 "wo" 字符被忽略cin.ignore(3);// 讀取第一個字符, 查看后續是否有字符int c = cin.peek();cout << "c=" << c << endl;if (c != 0) {// 將剩余的字符讀取到 buf2 數組中// "rld" 字符被讀取到 buf2 緩沖區中cin.getline(buf2, 32);// 輸出接收的數據cout << "buf=" << buf << endl;cout << "buf2=" << buf2 << endl;}// 控制臺暫停 , 按任意鍵繼續向后執行system("pause");return 0;
};
執行結果 :
hello world
c=114
buf=hello
buf2=rld
請按任意鍵繼續. . .
三、cin.putback() 函數
1、cin.putback() 函數簡介
cin.putback() 函數 用于將一個字符放回輸入流中 , 將最近從輸入流中提取的一個字符重新放回流中 , 以便再次讀取 ;
cin.putback() 函數原型如下 :
istream& putback(char c);
- 參數解析 : 參數 c 是要放回輸入流中的字符
- 返回值解析 : 該函數返回一個指向調用它的輸入流的引用 , 因此可以進行鏈式調用 ;
2、代碼示例 - cin.putback()
在下面的示例中 , 輸入內容 “hello” , 取出第一個字符 , 判斷是否是 h 字符 , 如果是則將取出的字符放回緩沖區 , 將緩沖區的內容輸出到 字符數組中 ;
代碼示例 :
#include "iostream"
using namespace std;int main() {char c;char buf[32];// 命令行中 , 使用鍵盤輸入 "hello"// 讀取第一字節字符cin >> c;// 將去除的字符放回去cin.putback(c);if (c == 'h') {cin >> buf;}cout << "c=" << c << " , buf : " << buf << endl;// 控制臺暫停 , 按任意鍵繼續向后執行system("pause");return 0;
};
執行結果 :
hello
c=h , buf : hello
請按任意鍵繼續. . .