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

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>
            一区二区三区在线视频观看| 亚洲无限av看| 欧美激情1区| 免费试看一区| 一本大道久久a久久综合婷婷 | 欧美日韩亚洲网| 欧美一区二区三区四区在线观看 | 99精品免费视频| 性欧美1819性猛交| 亚洲经典在线| 性欧美8khd高清极品| 最近中文字幕mv在线一区二区三区四区 | 亚洲一区免费网站| 亚洲电影免费观看高清完整版在线观看 | 国内精品美女在线观看| 亚洲日本激情| 国产自产在线视频一区| 艳女tv在线观看国产一区| 伊人久久大香线蕉av超碰演员| 99国产精品久久久久老师| 亚洲春色另类小说| 性欧美videos另类喷潮| 亚洲专区一二三| 欧美日韩不卡一区| 亚洲福利国产| 激情小说另类小说亚洲欧美| 亚洲私拍自拍| 日韩午夜电影av| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美一区二区视频97| 欧美性大战久久久久久久| 亚洲日本理论电影| 亚洲三级免费观看| 麻豆久久婷婷| 免费国产自线拍一欧美视频| 国产午夜精品在线| 亚洲免费影视第一页| 亚洲在线中文字幕| 久久久久久久综合狠狠综合| 欧美亚日韩国产aⅴ精品中极品| 欧美国产一区在线| 亚洲第一黄色| 美女视频黄a大片欧美| 麻豆精品视频在线观看| 国产曰批免费观看久久久| 午夜精品成人在线| 久久精品女人| 黄色精品免费| 久久国产一区二区| 欧美r片在线| 亚洲黑丝在线| 欧美精品久久99| 日韩小视频在线观看| 在线视频亚洲| 国产精品毛片| 欧美怡红院视频| 欧美aⅴ一区二区三区视频| 亚洲电影专区| 欧美黄色免费| 中文国产亚洲喷潮| 久久国内精品视频| 亚洲第一主播视频| 欧美国产欧美亚州国产日韩mv天天看完整 | 午夜激情一区| 久久综合色播五月| 亚洲日本成人在线观看| 欧美日韩第一区| 亚洲网在线观看| 久久午夜精品一区二区| 亚洲青色在线| 国产精品v欧美精品∨日韩| 亚洲先锋成人| 快射av在线播放一区| 日韩午夜av在线| 国产九九精品| 欧美成人精品不卡视频在线观看| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲欧美另类在线| 久久―日本道色综合久久| 91久久久在线| 国产精品女主播| 久久男人av资源网站| 亚洲人成高清| 久久激情视频免费观看| 亚洲日产国产精品| 国产热re99久久6国产精品| 老**午夜毛片一区二区三区| 日韩一区二区精品葵司在线| 久久精品三级| 夜夜嗨av色一区二区不卡| 国产精自产拍久久久久久| 欧美电影在线播放| 久久动漫亚洲| 一本色道久久88精品综合| 麻豆精品传媒视频| 亚洲一区二区视频在线| 亚洲第一在线| 国产三级欧美三级| 欧美日本精品| 久久蜜桃精品| 亚洲欧美一区二区三区极速播放 | 久久久亚洲精品一区二区三区 | 亚洲一区中文| 亚洲国产美女| 国内成人精品2018免费看| 欧美日韩国产成人高清视频| 久久精精品视频| 亚洲一区二区网站| 亚洲精品视频在线播放| 免费日韩成人| 久久九九国产精品| 香蕉亚洲视频| 亚洲尤物视频网| 日韩亚洲视频在线| 亚洲黄页一区| 亚洲第一精品福利| 国产综合色在线| 国产精品亚洲аv天堂网| 欧美人在线观看| 欧美xart系列高清| 久久免费视频在线| 久久全球大尺度高清视频| 亚洲欧美日韩综合aⅴ视频| 亚洲一区二区精品| 一区二区三区欧美激情| 亚洲破处大片| 亚洲精品欧洲| 日韩视频在线永久播放| 亚洲国产精品一区| 亚洲国产高清aⅴ视频| 欧美刺激性大交免费视频| 久久综合给合| 免费91麻豆精品国产自产在线观看| 久久精品国产视频| 久久精品人人爽| 久久久久在线| 久久综合色婷婷| 欧美二区在线| 亚洲激情偷拍| 日韩一区二区精品视频| 一本色道久久99精品综合| 这里只有视频精品| 西瓜成人精品人成网站| 久久大逼视频| 美女黄网久久| 欧美日本精品在线| 国产精品视频不卡| 国产亚洲毛片在线| 激情校园亚洲| 亚洲精品乱码久久久久| 99视频国产精品免费观看| 在线综合亚洲欧美在线视频| 亚洲自拍三区| 久久久久一区二区三区| 欧美高清视频一区二区三区在线观看| 亚洲第一中文字幕| 亚洲精品乱码| 欧美一级电影久久| 久久中文字幕一区二区三区| 欧美极品色图| 国产精品久久影院| 激情综合激情| 一级日韩一区在线观看| 久久国产欧美日韩精品| 欧美成人黄色小视频| 亚洲日韩视频| 亚洲欧美一区二区视频| 久久综合九色综合欧美狠狠| 欧美国产丝袜视频| 国产乱子伦一区二区三区国色天香 | 欧美一区二区精品在线| 久久一二三四| 欧美资源在线观看| 农夫在线精品视频免费观看| 最新日韩在线| 亚洲男人第一av网站| 在线欧美电影| 欧美日韩欧美一区二区| 亚洲精品视频在线播放| 9人人澡人人爽人人精品| 亚洲欧美日韩直播| 久久伊人免费视频| 99综合在线| 久久久久久穴| 国产精品免费网站| 亚洲激情在线视频| 性做久久久久久免费观看欧美 | 欧美日韩视频在线一区二区观看视频| 国产精品久久久久久久午夜| 亚洲电影视频在线| 亚洲中字黄色| 欧美黄色影院| 欧美亚洲网站| 欧美日韩一区在线观看| 在线观看视频亚洲| 久久国产精品久久国产精品 | 在线欧美日韩国产| 性色av一区二区三区| 亚洲人成精品久久久久| 久久久久国产精品午夜一区|