scanf函數(shù)是C語(yǔ)言中用于從標(biāo)準(zhǔn)輸入流中讀取數(shù)據(jù)的函數(shù)。它的原型如下:
int scanf(const char *format, ...);
scanf函數(shù)根據(jù)format字符串中的格式控制符,從標(biāo)準(zhǔn)輸入流中讀取相應(yīng)類型的數(shù)據(jù),并將其存儲(chǔ)到對(duì)應(yīng)的變量中。讀取的數(shù)據(jù)以空白字符(空格、制表符、換行符)為分隔符。
下面是一些常用的格式控制符及其作用:
%d
:讀取一個(gè)有符號(hào)十進(jìn)制整數(shù)。
%f
:讀取一個(gè)單精度浮點(diǎn)數(shù)。
%lf
:讀取一個(gè)雙精度浮點(diǎn)數(shù)。
%c
:讀取一個(gè)字符。
%s
:讀取一個(gè)字符串。
%u
:讀取一個(gè)無(wú)符號(hào)十進(jìn)制整數(shù)。
%x
:讀取一個(gè)無(wú)符號(hào)十六進(jìn)制整數(shù)。
%o
:讀取一個(gè)無(wú)符號(hào)八進(jìn)制整數(shù)。
scanf函數(shù)返回成功讀取的參數(shù)個(gè)數(shù),若出現(xiàn)錯(cuò)誤則返回EOF。在讀取字符串時(shí),scanf函數(shù)會(huì)在讀取到空白字符之前停止,并將空白字符留在輸入流中。
需要注意的是,scanf函數(shù)在讀取數(shù)據(jù)時(shí)需要保證輸入流中的內(nèi)容與格式控制符匹配,否則可能會(huì)導(dǎo)致錯(cuò)誤的輸出結(jié)果。為了避免這種情況,我們可以使用scanf函數(shù)的返回值來(lái)檢查是否成功讀取了預(yù)期的參數(shù)個(gè)數(shù)。
另外需要注意的是,scanf函數(shù)對(duì)于字符串類型的輸入會(huì)自動(dòng)在末尾添加一個(gè)空字符’\0’。因此,在定義字符串時(shí)需要保證足夠的緩沖區(qū)空間。如果是讀取固定長(zhǎng)度的字符串,可以使用限定符%ns來(lái)限制讀取的字符個(gè)數(shù),比如%10s表示讀取最多10個(gè)字符的字符串。
此外,scanf函數(shù)還可以通過(guò)在格式控制符前添加修飾符來(lái)修改讀取行為,比如:
*
:跳過(guò)該參數(shù)的讀取。
h
:讀取short類型的數(shù)據(jù)。
l
:讀取long類型的數(shù)據(jù)。
L
:讀取long double類型的數(shù)據(jù)。
總之,scanf函數(shù)是C語(yǔ)言中常用的輸入函數(shù),可以根據(jù)格式控制符從標(biāo)準(zhǔn)輸入流中讀取各種類型的數(shù)據(jù)。使用時(shí)需要注意數(shù)據(jù)的格式匹配和輸入的錯(cuò)誤處理。