C-如何将fscanf()用于可变长度的行?

C-如何将fscanf()用于可变长度的行?,c,file,scanf,C,File,Scanf,我正在读一个包含字符和大量整数的文件。我正在使用fscanf函数读取它,以便检索所有整数。但是我不知道一条线上会有多少个整数。我怎样才能让它继续工作 问题是,要使用easy函数fscanf,我必须事先知道我的文件将具有什么结构,即有多少个整数等 我想使用类似于: fscanf(fp, "%d//%d %d//%d", &array1[0], &array1[1], &array1[3], &array1[4]); e、 g:这是我的档案 f 7//1 8//1

我正在读一个包含字符和大量整数的文件。我正在使用fscanf函数读取它,以便检索所有整数。但是我不知道一条线上会有多少个整数。我怎样才能让它继续工作

问题是,要使用easy函数fscanf,我必须事先知道我的文件将具有什么结构,即有多少个整数等

我想使用类似于:

fscanf(fp, "%d//%d %d//%d", &array1[0], &array1[1], &array1[3], &array1[4]);
e、 g:这是我的档案

f 7//1 8//1 10//1 9//1

f 9//2 10//2 12//2 11//2

f 11//3 12//3 14//3 13//3

f 21//8 22//8 24//8 23//8

f 23//9 24//9 26//9 25//9

f 25//10 26//10 28//10 27//10

f 65//30 66//30 68//30 67//30

f 10//31 8//31 70//31 68//31 66//31 64//31 62//31 60//31 58//31 56//31 54//31 52//31 50//31 48//31 46//31 44//31 42//31 40//31 38//31 36//31 34//31 32//31 30//31 28//31 26//31 24//31 22//31 20//31 18//31 16//31 14//31 12//31

f 67//32 68//32 70//32 69//32

您不能使用
fscanf
逐行读取文件。您可以使用
fgets
读取行,然后使用
strtok
sscanf
处理它们

int read_n, value;
char line[SIZE], *val;
char delims[] = " //\r\n\t ";

while (fgets(line, size, file) != NULL)
{
    val = strtok(line, delims);
    read_n = sscanf(val, "%d", &value);

    while(read_n > 0)
    {
        printf("Read [%d]\n", value);
        val = strtok(NULL, delims);
        read_n = (val == NULL) ? 0 : sscanf(val, "%d",&value);
    }
}

在多线程环境中使用
strtok\u r

请参见@J.Doe链接中的代码中是否存在未定义的行为。让我马上为您解决这个问题。@J.Doe请查找工作示例。