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

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,eofbitbadbit。這三個標志位在標志變量中是這樣分配的:

____________________________________

|     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)  編輯 收藏 引用 所屬分類: 格式.輸入輸出.數據類型
<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(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>
            亚洲精选一区二区| 久久成人精品视频| 亚洲精品乱码久久久久久蜜桃麻豆| 免费亚洲婷婷| 午夜一区二区三视频在线观看| 欧美区亚洲区| 尤物在线观看一区| 国产精品v片在线观看不卡| 亚洲国产精品精华液2区45| 欧美亚洲视频在线观看| 亚洲精品久久久久久久久| 久热精品视频在线观看一区| 国产日韩欧美综合精品| 欧美一区二区三区免费看| 亚洲永久免费av| 国产视频欧美| 蜜臀a∨国产成人精品| 久久人人97超碰人人澡爱香蕉| 国产一区视频网站| 久久免费视频网| 久久久精品免费视频| 尤妮丝一区二区裸体视频| 欧美成人午夜| 欧美久久久久免费| 亚洲欧美日韩在线| 欧美在线视频观看免费网站| 国产综合欧美在线看| 老司机精品视频网站| 免费日韩成人| 亚洲小说欧美另类社区| 亚洲视频欧美视频| 国产三级精品在线不卡| 噜噜噜躁狠狠躁狠狠精品视频| 久久五月激情| 中文久久乱码一区二区| 亚洲在线日韩| 亚洲第一区色| 一区二区高清视频在线观看| 国产乱码精品一区二区三区五月婷| 久久精品国产一区二区三区| 六十路精品视频| 亚洲免费在线观看视频| 久久精品国产精品亚洲综合| 亚洲激情国产精品| 日韩视频不卡| 精品粉嫩aⅴ一区二区三区四区| 欧美激情欧美激情在线五月| 欧美日韩午夜在线| 久久亚洲精品欧美| 欧美猛交免费看| 久久人人97超碰精品888| 欧美成人一区二区三区片免费| 亚洲在线观看视频网站| 久久久亚洲综合| 亚洲综合成人在线| 噜噜噜躁狠狠躁狠狠精品视频 | 欧美xart系列在线观看| 一区二区三区欧美激情| 欧美专区亚洲专区| 日韩视频一区二区| 性刺激综合网| 中日韩男男gay无套| 久久久久久久久久久久久女国产乱| 夜夜爽av福利精品导航 | 久热精品视频在线免费观看| 欧美gay视频激情| 欧美在线91| 欧美日韩国产影片| 老牛嫩草一区二区三区日本 | 亚洲免费不卡| 亚洲欧美日韩一区二区| 亚洲美女黄色| 久久精品国产精品亚洲精品| 亚洲午夜在线视频| 女仆av观看一区| 久久久久久久久岛国免费| 欧美私人啪啪vps| 亚洲黄一区二区| 亚洲国产一区二区三区青草影视 | 亚洲丶国产丶欧美一区二区三区| 一本久道久久综合中文字幕| 亚洲韩国青草视频| 久久精品国亚洲| 欧美在线视频免费观看| 欧美午夜久久久| 日韩写真视频在线观看| 日韩视频在线一区| 欧美高清视频在线播放| 欧美ed2k| 亚洲激情av| 欧美精品一区二区精品网| 欧美黑人国产人伦爽爽爽| 在线高清一区| 蜜臀99久久精品久久久久久软件 | 欧美国产一区二区在线观看| 老牛影视一区二区三区| 一区一区视频| 久久频这里精品99香蕉| 欧美成人自拍| 亚洲高清视频一区| 麻豆精品视频在线观看| 欧美激情视频给我| 一二三区精品| 国产精品青草综合久久久久99 | 国产精品一区视频网站| av成人免费在线观看| 一区二区三区视频观看| 欧美日韩一区二区三区四区在线观看| 亚洲国产精品免费| 这里只有精品视频在线| 欧美日本亚洲视频| 中国成人黄色视屏| 欧美亚洲视频一区二区| 黑人巨大精品欧美一区二区| 麻豆freexxxx性91精品| 亚洲毛片在线免费观看| 亚洲一区在线观看视频| 国产欧美视频在线观看| 久久久久久网站| 亚洲欧洲另类国产综合| 国产精品99久久不卡二区| 国产精品卡一卡二卡三| 久久精品卡一| 亚洲精品小视频| 欧美中文字幕在线播放| 亚洲国产va精品久久久不卡综合| 欧美激情久久久| 亚洲欧美日韩在线不卡| 欧美激情亚洲激情| 国产精品夫妻自拍| 欧美一区二区三区视频在线观看| 久久夜色精品亚洲噜噜国产mv| 亚洲人成久久| 国产欧美精品在线| 欧美jizz19性欧美| 一区二区三区四区精品| 久久久久久一区二区| 99ri日韩精品视频| 国产一区二区三区四区三区四| 欧美激情精品久久久久| 久久国产视频网| 一区二区三区日韩欧美精品| 免费在线成人av| 欧美一区二区三区久久精品茉莉花| 亚洲国产日本| 国产一区二区久久精品| 国产精品扒开腿做爽爽爽软件| 久久久水蜜桃av免费网站| 亚洲欧美国产高清| 亚洲精选久久| 亚洲福利视频一区| 久久亚洲不卡| 欧美亚洲视频在线观看| 一区二区三区精品| 亚洲国产欧美久久| 国产一区二区三区在线观看免费视频 | av成人免费观看| 亚洲国产精品悠悠久久琪琪| 久久久久久久高潮| 午夜激情亚洲| 亚洲午夜伦理| 99国产精品国产精品久久| 伊人色综合久久天天五月婷| 国产精品一区二区你懂的| 欧美日本中文| 欧美女同在线视频| 欧美成人精品一区二区三区| 久久久之久亚州精品露出| 性高湖久久久久久久久| 午夜国产精品影院在线观看| 亚洲永久免费视频| 亚洲一区二区三区精品动漫| 99亚洲一区二区| 一区二区三区 在线观看视| 亚洲精品免费在线播放| 亚洲精品精选| 一本色道久久88综合亚洲精品ⅰ| 亚洲人午夜精品免费| 欧美韩日一区二区| 亚洲第一在线综合在线| 亚洲国产精品一区二区www在线| 免费国产自线拍一欧美视频| 免费在线观看精品| 欧美大片网址| 亚洲国产另类久久久精品极度| 免费看亚洲片| 亚洲国产福利在线| 最近中文字幕日韩精品| 亚洲免费观看在线观看| 亚洲一区二区三区精品视频| 欧美中文字幕不卡| 久久视频一区| 欧美精品二区三区四区免费看视频| 欧美久久精品午夜青青大伊人| 免费观看欧美在线视频的网站| 美女精品视频一区| 欧美日韩一区二区三| 国产欧美视频在线观看| 狠狠色丁香婷婷综合影院| 亚洲高清一区二区三区|