📜  fscanf 字符串数组 (1)

📅  最后修改于: 2023-12-03 15:00:51.418000             🧑  作者: Mango

fscanf 字符串数组

fscanf 是 C 语言标准库中的一个函数,用于从输入流中读取数据。通常情况下,我们使用 fscanf 来读取数字、字符串等类型的数据。但是,有时候我们需要读取一组字符串时,可以使用 fscanf 字符串数组来完成。

使用格式
int fscanf(FILE *stream, const char *format, ...)

fscanf 的第二个参数是一个字符串,用于指示读取数据的类型和格式。我们可以在字符串中使用 %s 占位符来读取一个字符串,而使用 %[] 来读取一个字符串数组。

具体地,%[] 占位符的形式如下:

%[set of characters]

其中,set of characters 是一个集合,包含了我们允许读取的字符,例如:

%[abcdefg]

表示读取字符串中的字母 abcdefg。我们还可以使用 - 来定义一个范围,例如:

%[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 字符串数组可以让我们方便地读取一组字符串。当我们需要读取一组字符串时,或许可以考虑使用这个方法。