C語(yǔ)言學(xué)習(xí)(3)printf和scanf

??/*******************************************************************************************************
? ? ? ? ? ? ? ? ? ? ?剛開始學(xué)習(xí)C語(yǔ)言,僅代表自己的學(xué)習(xí)理解,不代表觀點(diǎn)一定正確
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 只做學(xué)習(xí)記錄
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?有錯(cuò)誤的麻煩指出,謝謝!
*********************************************************************************************************/
printf
***printf:標(biāo)準(zhǔn)格式化輸出
例:printf(“%d\n”,a);
?
***printf函數(shù)的返回值指的是被輸出的字符的數(shù)量(不包含\0)
例:int i = 43;
? ? ?printf("%d\n",printf("%d",printf("%d",i)));

當(dāng)?shù)谌齻€(gè)printf輸出43時(shí),返回給第二個(gè)printf的值是字符的數(shù)量,也就是兩個(gè)字符,所以輸出2,而返回到第一個(gè)printf時(shí)只有一個(gè)字符,即輸出為1
?
***在C語(yǔ)言中,\n作為printf刷新緩存的標(biāo)識(shí)符
?


scanf
scanf:標(biāo)準(zhǔn)格式化輸入
例:scanf(“%d”,&a);
?
scanf的使用技巧
***丟棄字符
在C99標(biāo)準(zhǔn)中是這樣定義的
?


例:
?
***字符匹配
????[]可以匹配待定的字符序列,需要在scanf的第一個(gè)參數(shù)中的轉(zhuǎn)換說(shuō)明符后使用
比如:char data[10]={0}; scanf(“%[xxx]”,data);
????^符號(hào)可以指定不能被匹配的字符
比如:scanf(“%[^xxx]”,data);
????-符號(hào)表示連接,可以把n個(gè)字符進(jìn)行連接,用于字符匹配
比如:scanf(“%[a-z]”,data);
注意:什么是匹配,就是從第一個(gè)字符開始接收,直到接收到匹配之外的字符就結(jié)束
圖二:當(dāng)輸入為數(shù)字時(shí),系統(tǒng)接收到的第一個(gè)字符不是小寫字母,就不會(huì)把數(shù)字放入緩存中,
并且之后的全部丟棄,輸出就為空
?


***清除緩存
清除\n(包括\n)以前的緩存
?
