青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 195,  comments - 30,  trackbacks - 0

今天看完一篇牛人博文,受益匪淺,小記一下。原文更詳細http://blog.csdn.net/lewsn2008/archive/2008/04/16/2295790.aspx
首先我們呢看一下輸入操作的原理, 程序的輸入都建有一個緩沖區,即輸入緩沖區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的數據存入輸入緩沖區,而cin等輸入輸出函數直接從輸入緩沖區中取數據。正因為cin等輸入輸出函數是直接從緩沖區取數據的,所以有時候當緩沖區中有殘留數據時,cin函數會直接取得這些殘留數據而不會請求鍵盤輸入。
---------------

1,要注意不同的函數是否接受空格符、是否舍棄最后的回車符的問題!

讀取字符時:

scanf()以Space空格、Enter、Tab結束一次輸入,不會舍棄最后的回車符(即回車符會殘留在緩沖區中),(區別讀字符串時會清楚)//所以可以用getchar()清除;

getchar()以Enter結束輸入,也不會舍棄最后的回車符;

讀取字符串時:

scanf()以Space、Enter、Tab結束一次輸入,會舍棄最后的回車符(區別讀字符時)和所有的空格等等。

gets()以Enter結束輸入(空格不結束),接受空格,會舍棄最后的回車符!

 

第二:為了避免出現上述問題,必須要清空緩沖區的殘留數據,可以用以下的方法解決:

方法1:C語言里提供了函數清空緩沖區,只要在讀數據之前先清空緩沖區就沒問題了!

       這個函數是fflush(stdin)。

方法2:自己取出緩沖區里的殘留數據。

       scanf("%[^\n]",string);

-------------------------
cin的學問

一. cin<<

該操作符是根據后面變量的類型讀取數據。

輸入結束條件   :遇到Enter、Space、Tab鍵。(這個很重要!)

對結束符的處理 :清楚緩沖區中使得輸入結束的結束符(Enter、Space、Tab)

(這里有一點問題,
int i;
char c[100];
cin>>i;
cin.getline(str,100);
cout<<str;
如果輸入是:12     adjf回車
輸出將先是空格然后adjf;
如果輸入是:12回車adjf回車
輸出將是adjf.
看來cin>>要在連用時,比如cin>>a>>b;或者cin>>a;cin>>b消除空格能力才體現。
)

二.cin.get()

該函數有三種格式:無參,一參數,二參數

即cin.get(),  cin.get(char ch),  cin.get(array_name, Arsize)

 

        (i)讀取字符的情況:

輸入結束條件:Enter鍵(遇空格不結束)

對結束符處理:不丟棄緩沖區中的Enter

cin.get() 與 cin.get(char ch)用于讀取字符,他們的使用是相似的,

即:ch=cin.get() 與 cin.get(ch)是等價的。

測試程序:
#include <iostream>

using namespace std;

int main()

{

       char c1, c2;

       cin.get(c1);

       cin.get(c2);

       cout<<c1<<" "<<c2<<endl;   // 打印兩個字符

       cout<<(int)c1<<" "<<(int)c2<<endl; // 打印這兩個字符的ASCII值

       return 0;

}

測試一輸入:

a[Enter]

輸出:

a

 

97 10

【分析】會發現只執行了一次從鍵盤輸入,顯然第一個字符變量取的'a', 第二個變量取的是Enter(ASCII值為10),這是因為該函數不丟棄上次輸入結束時的Enter字符,所以第一次輸入結束時緩沖區中殘留的是上次輸入結束時的Enter字符!

 

測試二輸入:

a b[Enter]

輸出:

a

97 32

【分析】顯然第一個字符變量取的'a', 第二個變量取的是Space(ASCII值為32)。原因同上,沒有丟棄Space字符。

            (ii)讀取字符串的情況:

cin.get(array_name, Arsize)是用來讀取字符串的,可以接受空格字符,遇到Enter結束輸入,按照長度(Arsize)讀取字符, 會丟棄最后的Enter字符。

                      (i i i)cin.getline()

cin.getline() 與 cin.get(array_name, Arsize)的讀取方式差不多,以Enter結束,可以接受空格字符。按照長度(Arsize)讀取字符, 會丟棄最后的Enter字符。

但是這兩個函數是有區別的:

cin.get(array_name, Arsize)
當輸入的字符串超長時,不會引起cin函數的錯誤,后面的cin操作會繼續執行,只是直接從緩沖區中取數據。但是cin.getline()

當輸入超長時,會引起cin函數的錯誤,后面的cin操作將不再執行。(具體原因將在下一部分"cin的錯誤處理"中詳細介紹)

------------
cin的錯誤處理

程序執行時有一個標志變量來標志輸入的異常狀態,其中有三位標志位分別用來標志三種異常信息,他們分別是:failbit,eofbit,badbit。這三個標志位在標志變量中是這樣分配的:

____________________________________

|     2     |     1    |     0     |

|  failbit  |  eofbit  |   badbit  |

|___________|__________|___________|

看一下這幾個標志位的作用(引用msdn)

badbit, to record a loss of integrity of the stream buffer.

eofbit, to record end-of-file while extracting from a stream.

failbit, to record a failure to extract a valid field from a stream.

In addition, a useful value is goodbit, where no bits are set.

 

接下來我么看幾個ios類的數據定義(引用msdn)

typedef T2 iostate;

static const iostate badbit, eofbit, failbit, goodbit;

 

這里ios類定義了這四個常量badbit, eofbit, failbit, goodbit,其實這四個標志常量就是取對應標志位的掩碼,也即輸入的四種異常情況!

以上四個常量對應的取值為:

ios::badbit    001   輸入(輸出)流出現致命錯誤,不可挽回 

ios::eofbit    010   已經到達文件尾

ios::failbit   100   輸入(輸出)流出現非致命錯誤,可挽回

ios::goodbit   000   流狀態完全正常, 各異常標志位都為0

如果出現輸入錯誤,則cin不再工作,我們可以用cin.clear()重置標記位。
測試程序

#include <iostream>

using namespace std;

int main ()

{

 char ch, str[20];

 cin.getline(str, 5);

 cout<<"flag1:"<<cin.good()<<endl;    // 查看goodbit狀態,即是否有異常

 cin.clear();                         // 清除錯誤標志

 cout<<"flag1:"<<cin.good()<<endl;    // 清除標志后再查看異常狀態

 cin>>ch;

 cout<<"str:"<<str<<endl;

 cout<<"ch :"<<ch<<endl;

 return 0;

}

測試輸入:

12345[Enter]

輸出:

flag1:0  // good()返回false說明有異常

flag2:1  // good()返回true說明,clear()已經清除了錯誤標志

str:1234

ch :5


但是當前一次讀取數據出錯后,如果緩沖區沒有清空的話,重置錯誤標志還不夠!要是能將緩沖區的殘留數據清空了就好了哦!下面我們再來看一個很重要的函數!cin.ignore()

這個函數用來丟棄輸入緩沖區中的字符,第一參數定義一個數,第二個參數定義一個字符變量。
例:
cin.ignore(5, 'a'); 函數將不斷從緩沖區中取一個字符丟棄,直到丟棄的字符數達到5或者讀取的字符為'a'。

其實該函數最常用的方式是這樣的,將第一個參數設的非常大,將第二個參數設為'\n',這樣就可以緩沖區中回車符中的所有殘留數據,因為一般情況下前面輸入殘留的數據是沒有用的,所以在進行新一次輸入操作前將緩沖區中所有數據清空是比較合理。

如:cin.ignore(1024, '\n');


------
posted on 2009-07-21 15:18 luis 閱讀(1710) 評論(0)  編輯 收藏 引用 所屬分類: 格式.輸入輸出.數據類型
<2012年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

文章分類

文章檔案

友情鏈接

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲六月丁香色婷婷综合久久| 欧美性一区二区| 亚洲成色999久久网站| 欧美中文在线视频| 欧美有码在线视频| 久久久久国产一区二区三区| 久久久99精品免费观看不卡| 久久婷婷一区| 亚洲电影欧美电影有声小说| 亚洲乱码国产乱码精品精98午夜 | 欧美专区一区二区三区| 性欧美1819sex性高清| 久久精品国产亚洲高清剧情介绍| 蜜桃av一区二区三区| 亚洲激情在线观看| 亚洲午夜精品一区二区| 久久精品国产在热久久 | 久久久久久久久伊人| 久久综合久久综合这里只有精品 | 欧美精品激情| 亚洲一级在线| 亚洲国产高清在线| 亚洲二区在线视频| 亚洲人成人一区二区在线观看| 欧美亚洲三级| 久久久久久网| 亚洲二区在线观看| 亚洲一区二区三区三| 欧美一区二区黄| 美女网站在线免费欧美精品| 国产女主播一区| 91久久久久久久久| 亚洲日本久久| 日韩一二在线观看| 亚洲精品视频免费在线观看| 亚洲第一页中文字幕| 亚洲午夜视频在线观看| 99在线视频精品| 韩日精品视频| 欧美亚洲自偷自偷| 欧美专区18| 一本不卡影院| 亚洲国产精品va在看黑人| 亚洲一区二区免费| 亚洲国产毛片完整版| 亚洲视频一区在线| 欧美大片免费观看| 久久大综合网| 国产欧美日韩亚洲一区二区三区| 在线观看精品| 久久久久se| 亚洲欧美日本伦理| 国产精品久久久久久久久婷婷| 亚洲美女视频网| 欧美日韩视频专区在线播放 | 欧美精品粉嫩高潮一区二区| 欧美日韩在线不卡| 亚洲精品永久免费精品| 开心色5月久久精品| 欧美一区二区视频网站| 国产欧美亚洲精品| 久久视频在线看| 136国产福利精品导航| 欧美一区二区三区婷婷月色| 亚洲视频一二| 国产精品草草| 欧美一区成人| 欧美中文字幕在线视频| 国内偷自视频区视频综合| 欧美专区日韩视频| 久久久xxx| 亚洲国产欧美久久| 亚洲国产婷婷香蕉久久久久久| 美国十次了思思久久精品导航| 激情六月婷婷久久| 欧美韩日精品| 欧美日韩卡一卡二| 先锋a资源在线看亚洲| 午夜在线观看免费一区| 国内偷自视频区视频综合| 欧美电影免费观看高清| aa级大片欧美| 亚洲欧美成人网| 经典三级久久| 亚洲国产日韩一区二区| 欧美视频在线看| 久久久97精品| 欧美国产综合| 午夜国产精品视频| 久久久久久久综合| 日韩视频一区| 欧美一区二区三区啪啪| 亚洲国产一成人久久精品| 亚洲美女视频在线观看| 国产视频自拍一区| 亚洲精品国产日韩| 国产亚洲毛片在线| 亚洲精品一二三| 国产一区二区三区成人欧美日韩在线观看| 男人天堂欧美日韩| 国产精品美女xx| 欧美成人激情在线| 国产精品欧美经典| 亚洲黄色在线| 又紧又大又爽精品一区二区| 一本色道久久99精品综合| 亚洲黄色成人久久久| 亚洲资源在线观看| 欧美日韩国产成人在线观看| 午夜在线一区二区| 欧美激情视频一区二区三区免费 | 美女视频黄 久久| 欧美精品系列| 久久久天天操| 国产精品一级| 亚洲毛片在线观看| 亚洲福利国产| 欧美中文在线免费| 亚洲免费在线视频| 欧美另类视频| 亚洲大胆在线| 一区精品久久| 久久久久免费| 久久亚洲午夜电影| 国产午夜一区二区三区| 亚洲在线观看视频网站| 一片黄亚洲嫩模| 欧美激情第三页| 亚洲国产另类久久精品| 亚洲黄色成人网| 看片网站欧美日韩| 欧美高清视频| 亚洲激情视频网| 麻豆成人在线| 亚洲福利电影| 99亚洲一区二区| 欧美高潮视频| 亚洲国产精品尤物yw在线观看| 亚洲日本中文| 欧美人在线观看| 夜夜嗨av一区二区三区四季av| 中文精品视频一区二区在线观看| 欧美精品在线免费观看| 亚洲精品人人| 欧美一站二站| 精品成人a区在线观看| 久久综合久久综合久久综合| 欧美高清免费| 亚洲网站视频福利| 国产精品一区二区你懂得| 欧美一区亚洲| 亚洲承认在线| 亚洲自拍三区| 国产在线精品自拍| 蜜桃av噜噜一区| 99精品国产高清一区二区| 亚洲欧美日韩成人| 黄色一区二区在线| 99视频精品在线| 欧美系列精品| 久久精品理论片| 91久久午夜| 欧美亚洲视频在线看网址| 悠悠资源网亚洲青| 欧美人体xx| 欧美一区亚洲一区| 亚洲精品美女久久7777777| 亚洲综合丁香| 亚洲高清一区二| 国产精品黄视频| 欧美成人精品1314www| 99re6这里只有精品| 亚洲最新在线视频| 欧美午夜不卡| 久久久久久自在自线| 亚洲美女视频在线观看| 久久久久久国产精品mv| 亚洲精品欧美极品| 国产日韩欧美中文在线播放| 牛牛影视久久网| 亚洲免费在线观看| 亚洲高清在线精品| 久久超碰97中文字幕| 亚洲精品美女| 激情五月婷婷综合| 国产精品久久久久秋霞鲁丝| 久久综合影视| 午夜精品久久久久久久99樱桃| 91久久精品一区| 老鸭窝毛片一区二区三区| 亚洲男女自偷自拍图片另类| 亚洲精品美女在线观看播放| 国产日韩一区二区三区| 欧美日韩国产色视频| 美女久久网站| 久久国产日韩欧美| 亚洲欧美日本国产有色| 日韩视频三区| 91久久精品一区二区别| 亚洲成人中文|