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