對(duì)scanf的不了解,導(dǎo)致程序出錯(cuò),考試大把scanf的具體用法整理出來(lái),希望大家可以共同進(jìn)步,有什么不對(duì)的地方可以提出來(lái)。
int scanf(char *format,...);
這應(yīng)該是scanf的標(biāo)準(zhǔn)形式。先說(shuō)說(shuō)關(guān)于他的返回值的問(wèn)題。
庫(kù)函數(shù)幾乎都是有返回值的,有些人可能很奇怪,怎么很少人用過(guò)scanf的返回值呢?
scanf會(huì)返回成功接收到的變量數(shù)量的值。比如scanf("%d",&j"),與scanf("%d=",&j),如果接受成功的話返回值都是1
用如下語(yǔ)句作了測(cè)試
#include
int main (){
int j;
printf ("%d",scanf("%d\n",&j));
return 0;
}
如果你開(kāi)始就輸入回車(chē),程序會(huì)繼續(xù)等待你輸入,因?yàn)樵谳斎霐?shù)字的時(shí)候,scanf會(huì)跳過(guò)空白字符。(the c programming language 上說(shuō),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è)庫(kù)函數(shù)fflush(stdin)來(lái)清除緩沖。不過(guò)貌似雨中飛燕大姐說(shuō)這個(gè)用法是非標(biāo)準(zhǔn)的。K&R,只是說(shuō)行為沒(méi)有定義,但我們可以使用while((c=getchar())!='\n'&&c!=EOF);同樣可以清除后面的垃圾!
int scanf(char *format,...);
這應(yīng)該是scanf的標(biāo)準(zhǔn)形式。先說(shuō)說(shuō)關(guān)于他的返回值的問(wèn)題。
庫(kù)函數(shù)幾乎都是有返回值的,有些人可能很奇怪,怎么很少人用過(guò)scanf的返回值呢?
scanf會(huì)返回成功接收到的變量數(shù)量的值。比如scanf("%d",&j"),與scanf("%d=",&j),如果接受成功的話返回值都是1
用如下語(yǔ)句作了測(cè)試
#include
int main (){
int j;
printf ("%d",scanf("%d\n",&j));
return 0;
}
如果你開(kāi)始就輸入回車(chē),程序會(huì)繼續(xù)等待你輸入,因?yàn)樵谳斎霐?shù)字的時(shí)候,scanf會(huì)跳過(guò)空白字符。(the c programming language 上說(shuō),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è)庫(kù)函數(shù)fflush(stdin)來(lái)清除緩沖。不過(guò)貌似雨中飛燕大姐說(shuō)這個(gè)用法是非標(biāo)準(zhǔn)的。K&R,只是說(shuō)行為沒(méi)有定義,但我們可以使用while((c=getchar())!='\n'&&c!=EOF);同樣可以清除后面的垃圾!

