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

隨筆-145  評(píng)論-173  文章-70  trackbacks-0
當(dāng)讀入發(fā)生錯(cuò)誤,或者是到達(dá)文件尾,scanf就會(huì)返回EOF這個(gè)宏的值。
while(scanf("%d%d",&a,&b)!=EOF),這個(gè)語句就是說,當(dāng)讀取沒有到達(dá)文件尾的話,就不停的讀取。
scanf 函數(shù)的返回值反映的是按照指定的格式符正確讀入的數(shù)據(jù)的個(gè)數(shù)。如果輸入數(shù)據(jù)與指定格式不符,則會(huì)產(chǎn)生輸入錯(cuò)誤。遇到輸入錯(cuò)誤,scanf函數(shù)會(huì)立即終止,返回已經(jīng)成功讀取的數(shù)據(jù)的個(gè)數(shù)。所以,通過scanf函數(shù)的返回值和指定輸入數(shù)據(jù)的個(gè)數(shù)(由格式符決定)的比較,可以判斷數(shù)據(jù)輸入是否成功。

scanf("%d%d",&a,&b); 這個(gè)語句會(huì)去讀兩個(gè)整型到a, b。如果讀取成功,應(yīng)該返回2。就是它成功讀取變量的個(gè)數(shù)。


論壇上很多人對(duì)scanf的不太了解,導(dǎo)致程序出錯(cuò),我想把scanf的具體用法貼出來,希望大家可以共同進(jìn)步,有什么不對(duì)的地方可以提出來。
int scanf(char *format,...);
這應(yīng)該是scanf的標(biāo)準(zhǔn)形式。先說說關(guān)于他的返回值的問題。
庫函數(shù)幾乎都是有返回值的,有些人可能很奇怪,怎么很少人用過scanf的返回值呢?
scanf會(huì)返回成功接收到的變量數(shù)量的值。比如scanf("%d",&j"),與scanf("%d=",&j),如果接受成功的話返回值都是1
我用如下語句作了測(cè)試
#include <stdio.h>
int main (){
    int j;
    printf ("%d",scanf("%d\n",&j));
    return 0;
}
如果你開始就輸入回車,程序會(huì)繼續(xù)等待你輸入,因?yàn)樵谳斎霐?shù)字的時(shí)候,scanf會(huì)跳過空白字符。(the c programming language 上說,scanf實(shí)際上是用getchar()接受由數(shù)字組成的字符串,再轉(zhuǎn)換成數(shù)字)
如果我輸入ctrl-z(unix上是ctrl-d)則會(huì)返回-1(隨編譯器而定).這實(shí)際上就是常量EOF的值,也就是所謂的返回eof
如果我鍵入的不是數(shù)字返回值就是0。但是如果我輸入浮點(diǎn)數(shù),又會(huì)怎么樣呢?
我舉的例子中同樣會(huì)返回1,但是緩沖區(qū)會(huì)留下垃圾,如果是scanf("%d%d",&a,&b);則會(huì)出錯(cuò)。
這是可以使用一個(gè)庫函數(shù)fflush(stdin)來清除緩沖。不過貌似雨中飛燕大姐說這個(gè)用法是非標(biāo)準(zhǔn)的。K&R,只是說行為沒有定義,但我們可以使用while((c=getchar())!='\n'&&c!=EOF);同樣可以清除后面的垃圾
scanf的格式匹配還是比較簡(jiǎn)單,一定要記住的就是普通變量一定要加上&,否則編譯器無法檢測(cè)錯(cuò)誤,但運(yùn)行肯定會(huì)段錯(cuò)誤。
    ┏━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃ 代  碼 │             意                          義            
    ┠────┼────────────────────────────┨
    ┃   %a   │讀浮點(diǎn)值(僅適用于 C99)                                 
    ┃   %A   │讀浮點(diǎn)值(僅適用于 C99)                                 
    ┃   %c   │讀單字符                                                
    ┃   %d   │讀十進(jìn)制整數(shù)                                            
    ┃   %i   │讀十進(jìn)制、八進(jìn)制、十六進(jìn)制整數(shù)                          
    ┃   %e   │讀浮點(diǎn)數(shù)                                                
    ┃   %E   │讀浮點(diǎn)數(shù)                                                
    ┃   %f   │讀浮點(diǎn)數(shù)                                                
    ┃   %F   │讀浮點(diǎn)數(shù)(僅適用于 C99)                                 
    ┃   %g   │讀浮點(diǎn)數(shù)                                                
    ┃   %G   │讀浮點(diǎn)數(shù)                                                
    ┃   %o   │讀八進(jìn)制數(shù)                                             
    ┃   %s   │讀字符串                                                
    ┃   %x   │讀十六進(jìn)制數(shù)                                            
    ┃   %X   │讀十六進(jìn)制數(shù)                                            
    ┃   %p   │讀指針值                                                
    ┃   %n   │至此已讀入值的等價(jià)字符數(shù)                                
    ┃   %u   │讀無符號(hào)十進(jìn)制整數(shù)                                      
    ┃  %[ ]  │掃描字符集合                                            
    ┃   %%   │讀 % 符號(hào)(百分號(hào))                                       
    ┗━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
前面都很簡(jiǎn)單,%p,%n很少用到,跳過。要輸入%必須要在前面再加一個(gè)%,
重點(diǎn)來談?wù)?s和%[]。%s是讀入一個(gè)數(shù)組,他與gets的區(qū)別就在于%s會(huì)以任何的空字符結(jié)束,而gets是回車結(jié)束。
同樣%s前可以加數(shù)字,表示只讀多少個(gè)。
ANSI C 標(biāo)準(zhǔn)向 scanf() 增加了一種新特性,稱為掃描集(scanset)。 掃描集定義一個(gè)字符集合,可由 scanf() 讀入其中允許的字符并賦給對(duì)應(yīng)字符數(shù)組。 掃描集合由一對(duì)方括號(hào)中的一串字符定義,左方括號(hào)前必須綴以百分號(hào)。 例如,以下的掃描集使 scanf() 讀入字符 A、B 和 C:
    %[ABC]
使用掃描集時(shí),scanf() 連續(xù)吃進(jìn)集合中的字符并放入對(duì)應(yīng)的字符數(shù)組,直到發(fā)現(xiàn)不在集合中的字符為止(即掃描集僅讀匹配的字符)。返回時(shí),數(shù)組中放置以 null 結(jié)尾、由讀入字符組成的字符串。
對(duì)于許多實(shí)現(xiàn)來說,用連字符可以說明一個(gè)范圍。 例如,以下掃描集使 scanf() 接受字母 A 到 Z:
%[A-Z]
重要的是要注意掃描集是區(qū)分大小寫的。因此,希望掃描大、小寫字符時(shí),應(yīng)該分別說明大、小寫字母。
對(duì)于%[]還可以用^+任意字符(包括eof)來結(jié)束字符串的輸入。比如%[^EOF]就是直到有EOF輸入,字符串才中止。
但一定要記住就是c語言是緩沖輸入,即使你%[^a],再你輸入回車之前輸入多少的a都是不可能結(jié)束的。
%s的輸入會(huì)跳過空白字符,但是%c則不會(huì)。
這也就是
scanf("%d",&h);
scanf("%c",&c);
如果這寫的話,變量c放的一定是回車。
如果想實(shí)現(xiàn)這種輸入,可以在兩個(gè)語句之間加入一個(gè)getchar(),他可以吃掉這個(gè)回車,
也可用scanf("%d %c",&h,&c);來做,再輸入數(shù)字后加一個(gè)空格。就可以了
但千萬別用scanf("%d\n",&h)!!!!!!!!k&r說的十分清楚,任何非格式化的字符都需要完全匹配。
意味著,只有輸入數(shù)字后面再加\n才是合法的。
還有就是*加在任何項(xiàng)的前面表示該項(xiàng)不符值,別的就沒什么好說的了
posted on 2009-11-27 21:21 deercoder 閱讀(1062) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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网站| 欧美好吊妞视频| 欧美日韩国产黄| 欧美在线观看网站| 亚洲国产日韩欧美在线图片| 欧美一区二区成人| 在线视频欧美一区| 久久综合综合久久综合| 久久精品人人| 欧美在线观看视频一区二区| 欧美三级日本三级少妇99| 欧美激情中文不卡| 欧美极品一区| 亚洲欧美日韩国产另类专区| 亚洲无线观看| 性欧美暴力猛交另类hd| 亚洲欧美激情在线视频| 欧美日韩aaaaa| 亚洲影音先锋| 亚洲综合社区| 亚洲欧美国产77777| 欧美亚洲系列| 久久九九电影| 91久久精品一区| 亚洲国产高清一区| 日韩一级不卡| 午夜精品一区二区三区在线播放 | 在线视频亚洲| 亚洲欧美一级二级三级| 久久久久一区二区| 亚洲国产精品一区二区第四页av| 91久久久久久久久久久久久| 欧美激情一二区| 亚洲视频一区| 欧美一级淫片aaaaaaa视频| 麻豆精品一区二区综合av| 国产精品国产三级国产aⅴ无密码| 国产在线乱码一区二区三区| 亚洲精品国精品久久99热| 欧美一区二区三区四区视频| 亚洲第一福利社区| 亚洲欧美日韩一区在线| 免费成人在线视频网站| 国产精品推荐精品| 激情欧美丁香| 亚洲欧美日韩精品久久亚洲区| 久久久久九九九| 亚洲国产欧美久久| 欧美在线亚洲在线| 国产精品毛片一区二区三区| 免费欧美在线| 国产欧美综合在线| 一本色道久久88精品综合| 午夜久久福利| 亚洲国产99| 性欧美大战久久久久久久免费观看| 欧美精品色综合| 好吊日精品视频| 午夜精品国产| 夜夜嗨一区二区| 农夫在线精品视频免费观看| 亚洲国产清纯| 久久九九国产精品| 亚洲精品一区二区三区99| 久久精品国产视频| 国产欧美日韩一级| 中文av一区特黄| 欧美搞黄网站| 久久国产精品第一页| 国产午夜一区二区三区| 性亚洲最疯狂xxxx高清| 一本色道久久综合狠狠躁篇怎么玩 | 麻豆久久久9性大片| 国产精品永久免费观看| 久久国产精品久久国产精品| 亚洲另类自拍| 久久综合久久88| 国产在线精品自拍| 欧美在线free| 亚洲破处大片| 国产精品蜜臀在线观看| 亚洲一线二线三线久久久| 99热免费精品| 国产精品久久久久免费a∨| 久久久久久9| 国产一区二区三区无遮挡| 久久久亚洲综合| 欧美一区二区精美| 欧美在线999| 午夜日韩在线| 国产伦精品一区二区三区在线观看 | 欧美国产日韩视频| 久久久久一区二区| 国产精品亚洲产品| 亚洲国产天堂久久综合| 男男成人高潮片免费网站| 一区二区亚洲欧洲国产日韩| 蜜桃精品一区二区三区 | 欧美日韩亚洲三区| 午夜精品视频在线| 你懂的视频一区二区| 99精品国产在热久久婷婷| 亚洲先锋成人| 日韩性生活视频| 欧美在线视频一区| 最新国产の精品合集bt伙计| 久久精品系列| 久久成人综合视频| 亚洲精品一区二区三区蜜桃久 | 夜夜嗨av一区二区三区网站四季av| 亚洲午夜av电影| 久久福利资源站| 在线播放亚洲| 欧美在线视频免费播放| 一个人看的www久久| 午夜精品久久久久久久久久久| 欧美午夜无遮挡| 久久xxxx精品视频| 乱中年女人伦av一区二区| 欧美在线观看视频在线| 欧美精品v日韩精品v国产精品| 久久精品理论片| 欧美激情中文不卡| 免费久久99精品国产自在现线| 欧美黄色一级视频| 亚洲欧洲三级| 亚洲欧美激情精品一区二区| 亚洲第一在线综合在线| 99精品欧美| 一区二区亚洲精品| 亚洲靠逼com| 亚洲国产精品毛片| 久久久噜噜噜| 欧美一区二区三区四区在线| 欧美日韩一区二区在线| 久久综合九色99| 欧美午夜精品久久久久免费视| 欧美激情第9页| 国产精品婷婷| 亚洲一区在线播放| 欧美在线网址| 国产精品在线看| 亚洲欧美日韩国产一区二区三区| 亚洲伊人第一页| 国产精品久久久久久久久久久久久久| 亚洲电影免费观看高清完整版| 亚洲国产精品一区二区尤物区| 欧美在线你懂的| 葵司免费一区二区三区四区五区| 在线观看国产日韩| 欧美.www| 亚洲国产日韩欧美在线动漫| 黄色工厂这里只有精品| 久久福利影视| 麻豆精品在线视频| 在线不卡中文字幕| 久久综合伊人77777尤物| 欧美日韩国产免费| 玉米视频成人免费看| 久久国产精品亚洲va麻豆| 久久综合图片| 99热免费精品在线观看| 国产精品青草久久| 午夜亚洲福利| 久久久91精品| 精品动漫3d一区二区三区免费版| 久久婷婷国产麻豆91天堂| 日韩网站在线观看| 亚洲综合精品一区二区| 国产精品日韩欧美一区二区三区| 亚洲深爱激情| 午夜精品国产| 国产精品自拍小视频| 亚洲在线黄色| 欧美亚洲一区在线| 国产精品久久午夜| 亚洲尤物视频在线| 先锋资源久久| 久久精品人人做人人爽| 国产精品网站视频| 欧美大片免费久久精品三p| 欧美激情精品久久久六区热门| 99re6热只有精品免费观看| 欧美日韩一区三区四区| 久久av一区二区| 久久亚洲视频| 国产日韩一区在线| 你懂的亚洲视频| 狼狼综合久久久久综合网| 亚洲欧美日韩天堂| 欧美人交a欧美精品| 久久九九国产精品怡红院| 亚洲一区在线播放| 亚洲人在线视频| 久久国产成人| 亚洲午夜精品一区二区三区他趣| 亚洲毛片在线看| 国内成人精品视频| 久久精品国产亚洲5555| 99精品视频网|