九九热这里直有精品,1区二区三区在线播放,玖玖爱在线观看资源,国产aⅴ综合网,午夜福利男女,日本亚洲欧美三级,日韩无码黄色导航,内射少妇13区,中文字幕高清网

您身邊的軟件定制專家--9年開發(fā)經(jīng)驗(yàn)為您護(hù)航

18678812288
0531-88887250

c++流狀態(tài)的查詢和控制

文章作者:濟(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)理。

清流县| 大理市| 西丰县| 互助| 望都县| 漠河县| 威海市| 突泉县| 体育| 芦山县| 杭锦后旗| 天柱县| 金门县| 罗城| 湖州市| 渝中区| 松原市| 荔浦县| 牙克石市| 邹城市| 灵川县| 遂宁市| 林芝县| 阿瓦提县| 鲁山县| 洛川县| 伊吾县| 陈巴尔虎旗| 平定县| 奈曼旗| 东乌珠穆沁旗| 莱西市| 镇江市| 峨边| 平南县| 石狮市| 祥云县| 景宁| 扬中市| 辰溪县| 凌源市|