C語(yǔ)言中scanf函數(shù)詳解

小云
114
2023-09-13 06:56:49

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ò)誤處理。

0