首先,先來講一下scanf的讀取流程:

從鍵盤輸入的都是字符類型(一系列的字符),scanf()的作用就是將這個(gè)字符序列轉(zhuǎn)換成一個(gè)或多個(gè)指定的類型,并保存到變量中。

從鍵盤輸入的字符序列會(huì)先緩存到鍵盤緩沖區(qū)中,當(dāng)用戶輸入回車,這時(shí)會(huì)清空鍵盤緩沖區(qū),將鍵盤緩沖區(qū)的數(shù)據(jù)(包括回車)送入到stdin中

這時(shí)scanf()開始從stdin中讀取數(shù)據(jù)。

scanf()在讀取每個(gè)字段時(shí)都會(huì)忽略空白符(%c比較特殊)。以%d為例,scanf()會(huì)先忽略stdin中的空白符,直到遇到第一個(gè)0-9開始讀取,如果后面的字符依然是0-9就繼續(xù)讀取,直到遇到空白符或者非0-9的字符,scanf認(rèn)為%d的讀取完畢,將讀取的字符序列轉(zhuǎn)換成十進(jìn)制整型保存到變量中。最后遇到的空白符或非法字符將返回到stdin中去。

如果忽略掉前面的空白符后第一個(gè)遇到的是非法的字符(非0-9),比如a,這時(shí)a會(huì)被返回到stdin中,程序也將會(huì)跳出scanf()函數(shù)(不管%d后面是否還存在帶輸入項(xiàng),如另一個(gè)%d,都會(huì)跳出整個(gè)scanf()函數(shù))。

看一個(gè)例子:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)
        
		<div   id=

網(wǎng)友評論