📅  最后修改于: 2023-12-03 15:00:51.418000             🧑  作者: Mango
fscanf
是 C 语言标准库中的一个函数,用于从输入流中读取数据。通常情况下,我们使用 fscanf
来读取数字、字符串等类型的数据。但是,有时候我们需要读取一组字符串时,可以使用 fscanf
字符串数组来完成。
int fscanf(FILE *stream, const char *format, ...)
fscanf
的第二个参数是一个字符串,用于指示读取数据的类型和格式。我们可以在字符串中使用 %s
占位符来读取一个字符串,而使用 %[]
来读取一个字符串数组。
具体地,%[]
占位符的形式如下:
%[set of characters]
其中,set of characters
是一个集合,包含了我们允许读取的字符,例如:
%[abcdefg]
表示读取字符串中的字母 a
、b
、c
、d
、e
、f
和 g
。我们还可以使用 -
来定义一个范围,例如:
%[0-9a-fA-F]
表示读取一个十六进制数。
最后,我们还可以使用 ^
来表示否定,例如:
%[^ ]
表示读取字符串中的非空格字符。
下面是一个使用 %[]
占位符读取字符串数组的例子:
#include <stdio.h>
int main() {
char words[20][50];
FILE *fp = fopen("test.txt", "r");
for (int i = 0; i < 20; i++) {
if (fscanf(fp, "%49[^ \n]", words[i]) != 1) {
break;
}
}
for (int i = 0; i < 20; i++) {
printf("%s\n", words[i]);
}
fclose(fp);
return 0;
}
这个程序从文件 test.txt
中逐个读取字符串,直到读取了 20 个字符串或无法读取为止。%49[^ \n]
表示读取 49 个非空格和非换行符的字符。由于 C 语言中数组下标从 0 开始,因此我们需要使用 49
而不是 50
。
fscanf
字符串数组可以让我们方便地读取一组字符串。当我们需要读取一组字符串时,或许可以考虑使用这个方法。