C語(yǔ)言中scanf()函數(shù)是從標(biāo)準(zhǔn)輸入流stdin中讀取信息的,很多時(shí)候調(diào)用scanf()函數(shù)卻得不到想要的信息,可以從這方便考慮解決問(wèn)題。
fflush(stdin);
是個(gè)不錯(cuò)的方法。
想要用scanf()函數(shù)讀入空白字符,回車符和換行符這些字符,就需要提到scanf()函數(shù)的格式說(shuō)明符:
轉(zhuǎn)換字符(就是%后跟的部分)
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 讀無(wú)符號(hào)十進(jìn)制整數(shù)
[ ] 掃描字符集合
% 讀 % 符號(hào)(百分號(hào))
附加格式說(shuō)明字符表修飾符說(shuō)明
L/l 長(zhǎng)度修飾符 輸入"長(zhǎng)"數(shù)據(jù)
h 長(zhǎng)度修飾符 輸入"短"數(shù)據(jù)
W 整型常數(shù) 指定輸入數(shù)據(jù)所占寬度
* 表示本輸入項(xiàng)在讀入后不賦值給相應(yīng)的變量
上面提到的 掃描字符集合 []就是關(guān)鍵,它使得讀入空白字符成為可能。如下所示:
#include <stdio.h>
#include <string.h>
int main()
{
}
上面代碼使得空格,制表符作為輸入成為可能,其中 %[^\n] 表示除了換行符\n之外的字符都接收。
如想要接收換行符\n作為輸入,只需要在掃描字符集中添加\n即可。
注意:
回車符是特殊字符,在scanf("%[^\n]", str)之后需要增加scanf("%c", newline),消除回車符。否則,只要接收到一個(gè)回車符scanf會(huì)不停止運(yùn)行。
聯(lián)系客服