一、cin函數的基本用法
cin函數是C++語言中的標準輸入函數,用於從標準輸入流中(一般為鍵盤)讀取數據,將其存儲到內存中的變量中。其基本用法如下:
cin >> 變量名;
其中,>>是一個輸入操作符,表示讀取輸入流中的一個數據並將其存儲到後面的變量中。我們可以通過各種數據類型的變量來接收輸入流中的數據。例如:
int a; cin >> a; cout << "您輸入的數字是:" << a << endl;
上面的代碼中,我們定義了一個int類型的變量a來接收輸入流中的數據,然後通過cout輸出這個變量。注意,在輸入時,需要在變量名和>>之間添加一個空格。
除了普通的數據類型,我們還可以使用string類型的變量來接收輸入流中的字符串。例如:
string str; cin >> str; cout << "您輸入的字符串是:" << str << endl;
上面的代碼中,我們定義了一個string類型的變量str來接收輸入流中的字符串,並通過cout輸出。
二、cin函數的輸入流控制
除了基本使用方式之外,cin函數還可以通過一些控制指令來控制輸入流。主要有以下幾種:
1. 輸入流控制——忽略空白字符
輸入流中可能會包含各種不同的空白字符,例如空格、製表符、回車等,對於這些字符,cin函數默認會自動跳過,只讀取有效的數據。如果需要強制讀取這些字符,可以使用以下控制指令:
cin >> noskipws >> 變量名;
noskipws是一個輸入控制符,表示不跳過空白字符。下面看一個例子:
char c; cin >> noskipws >> c; cout << "您輸入的字符是:" << c << endl;
上面的代碼中,我們定義了一個char類型的變量c來接收輸入流中的字符。因為使用了noskipws輸入控制符,所以即使輸入流中有空格,cin函數也會將其讀取到變量c中。
2. 輸入流控制——忽略換行符
除了空白字符,輸入流中還可能包含換行符。如果我們想強制讀取這些換行符,可以使用以下控制指令:
cin >> ws >> 變量名;
其中,ws是一個輸入控制符,表示忽略空白字符但不忽略換行符。下面看一個例子:
string str; getline(cin, str); cin >> ws; char c; cin >> c; cout << "您輸入的字符串是:" << str << endl; cout << "您輸入的字符是:" << c << endl;
上面的代碼中,我們先使用了getline函數接收一行字符串,並將其存儲到str變量中。接着使用了ws輸入控制符,表示忽略空白字符但不忽略換行符。然後再使用cin函數讀取一個字符,並將其存儲到變量c中。注意,使用getline函數時,需要包含頭文件<string>。
3. 輸入流控制——限制讀取的字符個數
有時候我們可能想限制用戶輸入的字符個數,以保證程序的安全性。cin函數可以通過如下控制指令實現這一目的:
cin.width(最大讀取位元組數); cin >> 變量名;
其中,width函數是一個輸入控制函數,表示限制讀取的字符個數。下面看一個例子:
char str[10]; cin.width(9); cin >> str; cout << "您輸入的字符串是:" << str << endl;
上面的代碼中,我們定義了一個char[]類型的數組str來接收輸入流中的字符串,然後使用width函數限定最多讀取9個字符,再使用cin函數讀取輸入流中的數據。如果輸入流中的字符個數大於9個,則cin函數會將其存儲到數組中的前9個元素中。
三、cin函數的異常處理
cin函數在讀取輸入流時,可能會遇到一些異常情況,例如輸入類型不匹配、輸入流結束等等。為了應對這些異常情況,cin函數提供了一些異常處理機制。下面介紹兩種常見的異常處理方式。
1. 異常處理方式一——檢查cin函數的返回值
cin函數在讀取輸入流時,會返回一個讀取狀態,如果讀取成功,返回值為1;如果是輸入流結束,返回值為0;如果讀取失敗,如輸入類型不匹配,返回值為0。我們可以通過檢查返回值的方式,來判斷輸入流的狀態。例如:
int a; if (cin >> a) { cout << "輸入成功,您輸入的數字是:" << a << endl; } else { cout << "輸入異常!" << endl; }
上面的代碼中,我們在cin函數後使用了if語句,來判斷輸入流的狀態。如果讀取成功,會輸出相應信息;如果讀取失敗,會輸出異常提示信息。
2. 異常處理方式二——捕獲異常
與其他程序語言一樣,C++也提供了異常機制來處理異常情況。cin函數在讀取輸入流時,可能會拋出一些異常,例如badbit、failbit、eofbit等等。我們可以使用try-catch語句來捕獲這些異常,並進行相應的處理。例如:
double a; try { cin >> a; if (cin.fail()) { throw "輸入類型錯誤!"; } if (a < 0) { throw "輸入數據無效!"; } cout << "您輸入的數字是:" << a << endl; } catch (const char* str) { cout << str << endl; }
上面的代碼中,我們使用了try-catch語句來捕獲可能拋出的異常。其中,try語句塊中包含了多個判斷條件,用於判斷輸入流的狀態。如果滿足不同的異常情況,則會通過throw語句拋出相應信息;如果沒有拋出異常,則輸出相應信息。catch語句塊中使用了const char*類型的異常處理函數,用於捕獲可能拋出的異常,並輸出相應信息。
原創文章,作者:HUBV,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/136204.html