C stdio fscanf() 函式
示例
從檔案中讀取字串
FILE *fptr;
fptr = fopen("filename.txt", "r");
char output[50];
fscanf(fptr, "%49s", output);
printf("%s", output);
fclose(fptr);
定義和用法
fscanf()
函式從檔案中讀取格式化資料,並將其寫入由引數指定的記憶體位置,然後將檔案指示器移動到它停止讀取的檔案位置。
fscanf()
函式定義在 <stdio.h>
標頭檔案中。
format 引數是一個字串,它描述了從檔案中期望的資料格式。如果檔案內容與格式不匹配,則函式將在第一個不匹配發生時停止讀取。
格式說明符
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 或 u |
整數 | 讀取一系列數字並將其解釋為整數。如果序列以“0x”開頭,則期望十六進位制數字(0-9 和 A-F)。如果序列以“0”開頭,則期望八進位制數字(0-7)。序列可能以符號(“+”或“-”)開頭。 |
d |
十進位制整數 | 讀取一系列數字(0-9)並將其解釋為整數。序列可能以符號(“+”或“-”)開頭。 |
o |
八進位制整數 | 讀取一系列數字(0-7)並將其解釋為八進位制整數。序列可能以符號(“+”或“-”)開頭。 |
x |
十六進位制整數 | 讀取一系列數字(0-9 和 A-F)並將其解釋為十六進位制整數。它可以以“0x”開頭。序列可能以符號(“+”或“-”)開頭。 |
f , e , g 或 a |
浮點數 | 讀取有效的字元序列並將其解釋為浮點數。有效序列至少有一個數字,前面可以有一個符號(“+”或“-”),後面可以跟一個小數點和十進位制數字。也可以使用科學記數法(一個數字後跟“e”或“E”和一些數字)。 |
c |
字元 | 從檔案中讀取一個字元。如果指定了寬度,則讀取指定數量的字元。 |
s |
字串 | 讀取檔案中直到下一個空白字元(空格、製表符、換行符)的所有字元。寫入引數的值將在其後附加一個 \0 空終止符。 |
p |
指標 | 讀取一系列表示指標地址的字元。 |
n |
無輸入 | 不從檔案中讀取任何內容。到目前為止已讀取的字元數將寫入該引數。該引數必須是指向整數的指標。 |
% |
百分號 | 讀取一個字元,期望它是一個“%”符號。此說明符不與任何引數關聯。 |
[characters] |
字元集 | 讀取一個字元,該字元與 characters 中指定的字元之一匹配。 |
[^characters] |
排除字元集 | 讀取一個字元,該字元不在 characters 中指定的字元集中。 |
有關如何使用格式說明符的示例,請參閱下面的更多示例。
語法
fscanf(FILE * fptr, const char * format, arg1, arg2...);
引數值
引數 | 描述 |
---|---|
fptr | 必需。一個檔案指標,通常由 fopen() 函式建立。 |
format | 必需。一個字串,表示從檔案中期望的資料格式。 |
arg1, arg2... | 可選。任意數量的附加引數,它們是指向可以寫入值的記憶體的指標。 |
技術詳情
返回 | 一個 int 值,表示已寫入的引數數量。如果發生錯誤,則返回常量 EOF 。 |
---|
更多示例
示例
從包含序列“1 + 2 = 3”的檔案中提取數字
FILE *fptr;
fptr = fopen("filename.txt", "r");
int a, b, c;
fscanf(fptr, "%i + %i = %i", &a, &b, &c);
printf("a = %d \n", a);
printf("b = %d \n", b);
printf("c = %d \n", c);
fclose(fptr);
示例
從檔案中讀取十六進位制數字並以十進位制輸出其值
FILE *fptr;
fptr = fopen("filename.txt", "r");
int num;
fscanf(fptr, "%x", &num);
printf("%d", num);
fclose(fptr);
示例
在檔案中查詢下一個字元“x”、“y”或“z”
FILE *fptr;
fptr = fopen("filename.txt", "r");
char c;
int found = fscanf(fptr, " %[xyz]", &c);
if (found > 0) {
printf("Found %c", c);
} else {
printf("Character not found");
}
fclose(fptr);