91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++輸入補充

發布時間:2020-05-17 23:30:01 來源:網絡 閱讀:453 作者:q369965658 欄目:移動開發

 最近看書時又搞到輸入流了,以前感覺還沒什么,但自己一寫時才發現,啥都不對,神馬問題都來了,暈倒,算了,安心的把輸入流理解理解,測試結果及代碼搞上:

 

首先看看cin.get(),它是一個讀取單個字符的方法.

字符變量=cin.get();相當于cin.get(字符變量);

 

cin的輸出返回一個cin對象,如果輸入錯誤返回一個bool值,所以可以用if(cin)來判斷輸入有沒有錯,if(cin)如果為真就說明輸入正確,否則錯誤。

 

int main()

{

char c;

c=cin.get();    //讀取單個字符,在屏幕輸入,也相當于cin.get(c);

cout<<c<<endl;  //輸出剛剛載入的單個字符

}

運行程序后,一切正常:

輸入:a    輸出:a

但當我們輸入的不只一個英文字符時,那又會如何呢?

輸入:abcd         輸出:a

由此可知,它只能讀取第一個字符,但如果我們把程序修改成:

int main()

{

char c;

char b;

c=cin.get();        //讀取單個字符,在屏幕輸入

b=cin.get();  

cout<<c<<b<<endl;  //輸出剛剛載入的單個字符

}

我們再輸入:abcd    最后輸出了:ab

既然cin.get()是讀取第一個字符,那b為什么不也是a呢?

其實是這樣的:

在cin這個對象里,有一個儲存字符的流,可以想象成緩沖區,但事實上是cin里封裝的一個東西.當我們在程序上輸入字符后,對象cin獲得了我們輸入的 字符,例如獲得abcd,然后再通過.get()把流里面的第一個字符去掉,賦給c,這時,cin里儲存的流的數據為bcd,而cstr則獲得了 a.當我們再次運行b=cin.get();時,同理把cin里流的數據的b拿出來給了bstr,此后,cin里面的流的數據為cd,而bstr則 為b,所以最后輸出時,便能輸出ab了.

還有個補充,究竟什么時候才輸入數據呢?我們可以再通過上面的代碼進行嘗試,我們輸入單個字母'a',然后按回車,發現并沒有輸出數據,而是再等待 一次輸入數據,我們再輸入字母'b',按回車后便輸出ab了.相信到這里,大家都應該明白了,因為當我們第一次輸入a后,通過 cstr=cin.get();使cin里的流沒有數據,清空了.所以到第二次要再賦給b值時,它找不到數據,要重新再輸入數據.由此來看可以知 道,當cin里的流數據清空時,便需要重新輸入才能賦值.而cin.get()還有個用法:

int main()

{

char c;

char b;

c=cin.get();        //讀取單個字符,在屏幕輸入

  cin.get();        //忽略一個字符或者刪除一個字符。

b=cin.get();  

cout<<c<<b<<endl;  //輸出剛剛載入的單個字符

}

 

程序中有3個cin.get(),所以我們嘗試輸入:abc.   發現輸出了:ac

由此能知道,當空回調cin.get();時,cin.get便自動在cin中的流數據中刪除一個字母,起了一個刪除作用.

對cin.get()有了一定了解之后,對cin.getline()的學習就可以更快了,原理是一致的,但是cin.getline()則是獲取一整行文本.以下是cin.getline()原形:

getline(char *line,int size,char='\n')

第一個就是字符指針,第二個是字符長度,第三個1行的結束標識符.

int main()

{

char cstr[200];

cin.getline(cstr,sizeof(str));     //第三個參數不輸入,默認回車為結束標識符

cout<<cstr<<endl;                //輸出

}

這樣我們輸入一堆英文或數字,然后按回車,就會輸出一行剛剛輸出的東西了.接下來.我們討論第三個參數的作用.

int main()

{

char cstr[200];

cin.getline(cstr,sizeof(str),'X');  //我們以單個英文字母'X'作為終止標識符

cout<<cstr<<endl;                   //輸出

}

當我們輸入一大堆東西,例如

輸入: kkkkkkk(回車)              輸出: kkkkkkk(回車)                        

bbbbbbb(回車)                     bbbbbbb(回車)       

lllllX                                          lllll

這樣X便成了終止符,其原理和cin.get一樣.

接下來我們談談cin.clear的作用,第一次看到這東西,很多人以為就是清空cin里面的數據流,而實際上卻與此相差很遠,首先我們看看以下代碼:

int main()

{

int a;

cin>>a;

cout<<cin.rdstate()<<endl;

if(cin.rdstate() == ios::goodbit)

{

cout<<"無錯誤!"<<endl;

}

if(cin.rdstate() == ios_base::failbit)

{

cout<<"非致命錯誤,可清除輸入緩沖區挽回!"<<endl;

}

system("pause");

}

我們定義要輸入到的變量是整型,但如果我們輸入了英文字母或者漢字,那就會發生錯誤,cin里有個方法能檢測這個錯誤,就是cin.rdstate();

當cin.rdstate()返回0(即ios::goodbit)時表示無錯誤,可以繼續輸入或者操作,若返回4則發生非致命錯誤即ios::failbit,則不能繼續輸入或操作.而cin.clear則可以控制我們此時cin里對這個問題的一個標識.語發如下:

cin.clear(標識符);

標識符號為:

goodbit 無錯誤

Eofbit 已到達文件尾

failbit 非致命的輸入/輸出錯誤,可挽回

badbit 致命的輸入/輸出錯誤,無法挽回

若在輸入輸出類里.需要加ios::標識符號

通過cin.clear,我們能確認它的內部標識符,如果輸入錯誤則能重新輸入.結合真正的清空數據流方法cin.sync(),請看下例:

int main()

{

int a;

while(1)

{

cin>>a;

if(!cin)            //條件可改寫為cin.fail()

{

cout<<"輸入有錯!請重新輸入"<<endl;

cin.clear();

cin.sync();   //清空流

}

else

{

cout<<a;

break;

}

}

}

上面的cin默認參數為1,即無錯誤,正常操作.當我們輸入英文字母'k'時,它的狀態標識改為0,即錯誤,用cout對用戶輸出信 息,再用cin.clear讓錯誤標識改回為0,讓我們可以繼續輸入,再清空流數據繼續輸入.如果我們沒有了cin.clear,則會進入死循環,其過程 為我們輸入了英文字母,它的狀態標識便為fail,當運行到條件判斷時,便總是回到錯誤的條件表示里,并且我們再也沒辦法輸入,因為錯誤的表示關閉了 cin,所以會進入死循環.

 

 

 

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麻江县| 呼图壁县| 锡林浩特市| 沐川县| 农安县| 进贤县| 夏津县| 确山县| 双辽市| 渭南市| 怀宁县| 洪洞县| 宁远县| 浮山县| 桂东县| 大同县| 黎川县| 柞水县| 高邮市| 庆阳市| 五河县| 龙南县| 仁怀市| 甘肃省| 泰和县| 淮北市| 永春县| 团风县| 泸水县| 台中市| 民丰县| 神木县| 安塞县| 湖南省| 大石桥市| 高密市| 西充县| 岳阳县| 株洲县| 固安县| 阿克|