C stdio scanf() 函式
示例
輸出使用者輸入的數字
// 建立一個整數變數來儲存我們從使用者那裡獲取的數字
int myNum;
// 要求使用者輸入一個數字
printf("輸入一個數字: \n");
// 獲取並儲存使用者輸入的數字
scanf("%d", &myNum);
// 輸出使用者輸入的數字
printf("你輸入的數字是: %d", myNum);
自己動手試一試 »
定義和用法
scanf()
函式讀取使用者輸入並將之寫入引數指定的記憶體位置。
scanf()
函式定義在 <stdio.h>
標頭檔案中。
format 引數是一個字串,描述了期望的資料格式。如果使用者輸入與格式不匹配,函式將在第一個不匹配處停止讀取。
注意: 更準確地說,它從 stdin
指定的位置讀取,該位置通常是鍵盤輸入,但也可以配置為指向檔案或其他位置。
格式說明符
format 字串可以包含格式說明符,用於指定使用者輸入中哪些部分將被寫入引數。每個格式說明符對應於函式的一個附加引數。
格式說明符的格式為 %[*][width][length]specifier
。方括號 [] 中的部分是可選的。
每個元件的解釋
*
- 可選。當存在時,格式說明符不對應於引數。width
- 可選。指定此說明符最多讀取的字元數。length
- 可選。一個字元序列,改變引數的資料型別。它可以是以下之一hh
- 期望char*
型別來表示整數。h
- 期望short*
型別來表示整數。l
- 期望long int*
型別來表示整數。
期望wchar_t*
型別來表示字元和字串。
期望double*
型別來表示浮點數。ll
- 期望long long int*
型別來表示整數。j
- 期望intmax_t*
或uintmax_t*
型別來表示整數。z
- 期望size_t*
型別來表示整數。t
- 期望ptrdiff_t*
型別來表示整數。L
- 期望long double*
型別來表示整數。
specifier
- 必需。一個字元或序列,指示如何解釋使用者輸入。可能的說明符列表如下表所示。
說明符列表
字元 | 說明符 | 描述 |
---|---|---|
i |
整數 | 讀取一系列數字並將它們解釋為整數。如果序列以 "0x" 開頭,則期望十六進位制數字(0-9 和 A-F)。如果序列以 "0" 開頭,則期望八進位制數字(0-7)。序列前面可以有一個符號("+" 或 "-")。 |
d 或 u |
十進位制整數 | 讀取一系列數字(0-9)並將它們解釋為整數。序列前面可以有一個符號("+" 或 "-")。 |
o |
八進位制整數 | 讀取一系列數字(0-7)並將它們解釋為八進位制整數。序列前面可以有一個符號("+" 或 "-")。 |
x |
十六進位制整數 | 讀取一系列數字(0-9 和 A-F)並將它們解釋為十六進位制整數。它可以以 "0x" 開頭。序列前面可以有一個符號("+" 或 "-")。 |
f , e , g 或 a |
浮點數 | 讀取有效的字元序列並將其解釋為浮點數。有效序列至少有一個數字,前面可以有一個符號(“+”或“-”),後面可以跟一個小數點和十進位制數字。也可以使用科學記數法(一個數字後跟“e”或“E”和一些數字)。 |
c |
字元 | 從檔案中讀取一個字元。如果指定了寬度,則讀取該數量的字元。 |
s |
字串 | 從使用者輸入中讀取直到下一個空白字元(空格、製表符、換行符)的所有字元。寫入引數的值將附加一個額外的 \0 空終止符。 |
p |
指標 | 讀取表示指標地址的一系列字元。 |
n |
無輸入 | 不讀取任何內容,而是將到目前為止已讀取的字元數寫入引數。引數必須是指向整數的指標。 |
% |
百分號 | 從使用者輸入中讀取一個字元,期望是一個 "%" 符號。此說明符不與引數關聯。 |
[字元集] |
字元集 | 讀取一個字元,該字元與 characters 中指定的字元之一匹配。 |
[^字元集] |
排除字元集 | 讀取一個字元,該字元不在 characters 中指定的字元集中。 |
有關如何使用格式說明符的示例,請參閱下面的更多示例。
語法
scanf(const char * format, arg1, arg2...);
引數值
引數 | 描述 |
---|---|
format | 必需。一個字串,表示使用者輸入所期望的資料格式。 |
arg1, arg2... | 可選。任意數量的附加引數,它們是指向可以寫入值的記憶體的指標。 |
技術詳情
返回 | 一個 int 值,表示已寫入的引數數量。如果發生錯誤,則返回常量 EOF 。 |
---|
更多示例
示例
從使用者提供的任何序列 "a + b = c" 中提取數字
int a, b, c;
scanf("%i + %i = %i", &a, &b, &c);
printf("a = %d \n", a);
printf("b = %d \n", b);
printf("c = %d \n", c);
示例
讀取一個十六進位制數字並以十進位制輸出其值
int num;
scanf("%x", &num);
printf("%d", num);
示例
在使用者輸入中搜索 "x"、"y" 或 "z" 中的任意一個
char c;
int found = scanf("%[xyz]", &c);
if(found > 0) {
printf("找到了 %c", c);
} else {
printf("未找到字元");
}