| 網(wǎng)站首頁 | 關(guān)于我們 | 開發(fā)優(yōu)勢(shì) | 產(chǎn)品展示 |
| 合作企業(yè) | 新聞動(dòng)態(tài) | 聯(lián)系我們 | 電話聯(lián)系 |
文章作者:濟(jì)南軟件開發(fā) 時(shí)間:2016年12月20日
1. 逗號(hào)表達(dá)式
首先計(jì)算每一個(gè)操作數(shù),然后返回最右邊的操作數(shù)最為整個(gè)操作的結(jié)果,因此while(cin >> ival, !cin.eof())看重的只是!cin.eof(),而對(duì)前邊的cin>>val不關(guān)心。
2. 條件狀態(tài)
流狀態(tài)由eof, bad, fail, good指示,如果eof, bad, fail任何一個(gè)為true那么流監(jiān)測(cè)狀態(tài)為錯(cuò)誤狀態(tài);相反都為false,則good為true.
其中badbit標(biāo)志著系統(tǒng)級(jí)的故障,是不可回復(fù)的,如果流出現(xiàn)這種情況,流通常就不能繼續(xù)使用了;failbit標(biāo)志著是可恢復(fù)的,可以修正。eofbit在遇到文件結(jié)束符時(shí)設(shè)置,此時(shí)還設(shè)置了failbit.
clear()和setstate()用于改變條件成員的狀態(tài)。clear()將條件重設(shè)為有效狀態(tài)(eof, bad, fail置為false;good置為true),setstate()把某個(gè)特定的流設(shè)為有效狀態(tài)。
3. cin
程序的輸入都建有一個(gè)緩沖區(qū),即輸入緩沖區(qū)。一次輸入過程是這樣的,當(dāng)一次鍵盤輸入結(jié)束時(shí)會(huì)將輸入的數(shù)據(jù)存入輸入緩沖區(qū),而cin函數(shù)直接從輸入緩沖區(qū)中取數(shù)據(jù)。正因?yàn)閏in函數(shù)是直接從緩沖區(qū)取數(shù)據(jù)的,所以有時(shí)候當(dāng)緩沖區(qū)中有殘留數(shù)據(jù)時(shí),cin函數(shù)會(huì)直接取得這些殘留數(shù)據(jù)而不會(huì)請(qǐng)求鍵盤輸入.
注意
輸入結(jié)束條件:遇到Enter、Space、Tab鍵,會(huì)把他們讀入到輸入緩沖區(qū),但是處理的時(shí)候會(huì)丟棄掉。
cin >> val 的返回值是cin, 即左值(同樣cout<<val返回左值cout),這樣就可以把cin >> val1; cin >> val2 合并為cin>>val1>>val2;
4. ignore函數(shù)
作用:提取輸入字符并丟棄他們。
函數(shù)原型:istream& ignore (streamsize n = 1, int delim = EOF)
讀取到前n個(gè)字符或在讀這n個(gè)字符進(jìn)程中遇到delim字符就停止,把讀取的這些東西丟掉。
案例:
復(fù)制代碼
#include <iostream>
#include <fstream>
#include <sstream>
#include <limits>
#include <stdexcept>
#include <typeinfo>
using namespace std;
int main()
{
int val1, val2;
while(1)
{
cin >> val1;
cin.ignore(5, '9');
cin >> val2;
cout << "val1:" << val1 << endl;
cout << "val2:" << val2 << endl;
}
}
復(fù)制代碼
運(yùn)行結(jié)果
注意:如果讀了n個(gè)字符,后面這個(gè)正好是停止字符,那么都讀出來干掉(例子的最后一個(gè))!
numeric_limits<streamsize>::max() 此時(shí)讀取的為最大長度,已經(jīng)沒有界限,只能靠停止符終止。本例中為‘\n’,即從回車后開始讀取
5. 為何必須有ignore()函數(shù)
cin.clear()把failbit位清零,但是錯(cuò)誤的輸入(不是指回車)還是在緩沖區(qū),每次一讀錯(cuò)誤就做相同的處理,如果沒有ignore(),那么當(dāng)輸入錯(cuò)誤時(shí),就會(huì)無限循環(huán)。并且還不是簡單的cin.ignore(),默認(rèn)的為ignore(1, '\n'),這樣會(huì)導(dǎo)致輸入幾個(gè)錯(cuò)誤的字符循環(huán)幾次,例如
while(cin >> val, 1)
{
cout << "hello " << endl;
cin.clear();
cin.ignore();
}
想要了解更多詳情歡迎來電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。