【问题标题】:How to keep track of last position of "i" when reading in different integers from multiple files into a 1dim-array?将多个文件中的不同整数读入 1dim 数组时,如何跟踪“i”的最后位置?
【发布时间】:2020-12-05 10:04:41
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c loops file for-loop do-while


    【解决方案1】:

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

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

    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;
    

    只会在第一次调用函数时执行一次。

    【讨论】:

    • 非常感谢,这就是我想要的!!我使用了你的第二种方法来避免全局变量。祝你周末愉快。 :-)
    猜你喜欢
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多