首页 > 解决方案 > 将多个文件中的不同整数读入 1dim 数组时,如何跟踪“i”的最后位置?

问题描述

我想从不同的文件中将多个整数读入一维数组,但是如何跟踪“i”停止的位置,以便我可以从“i”停止的位置继续保存?我不允许一次打开多个文件,这让我很恼火。我已经阅读了每个文件的行和列大小并保存了它。

len = rows * cols;
for(int i=0;i<len;i++) {
        fscanf(fp, "%d", &array[i]);
}

for 循环是我必须使用的循环还是其他循环会更好?也许可以使用指针来追踪循环停止的位置,像这样?

int i = 0;
    char c;
    do{
        fscanf(fp, "%d", &array[i]);
        i++;
        *cnt = i;
    }while((c=fgetc(fp)) != EOF);

但是当我第二次调用该函数时,如何将“i”设置为cnt?

标签: cloopsfilefor-loopdo-while

解决方案


我将您的问题理解为:您从多个文件中读取数字并将其放入一个数组中,并且您需要知道数组中将在所有文件中发生写入的正确索引。

您不需要使用指针来执行此操作,从某种意义上说,这里不需要指针(尽管这个问题可以通过使用指针来解决)。有几种方法可以实现您想要的:

1:

您可以使用全局变量作为数组中的索引。

unsigned int index = 0

int main() {
    read_from_file_and_save(filename);
}

void read_from_file_and_save() {
    char c;
    do{
        fscanf(fp, "%d", &array[index]);
        index++;
    }while((c=fgetc(fp)) != EOF);
}

2:

或者,您可以使用静态变量。静态变量在程序的整个生命周期中仅初始化一次,因此您可以编写:

void read_and_save() { 
   static unsigned int i = 0;
   char c;
   do{
       fscanf(fp, "%d", &array[i]);
       i++;
   }while((c=fgetc(fp)) != EOF);
}

保证该行:

static unsigned int i = 0;

将只执行一次,在第一次调用该函数时。


推荐阅读