迭代多个文件对象

时间:2015-10-10 08:52:54

标签: c function file

我想迭代文件对象的列表/数组:file_x,file_y,file_z,...,在C中调用每个文件对象的函数。

问题

如何创建一个将(i)文件对象和(ii)字符串作为函数参数然后将字符串写入该文件对象的函数。然后,For循环可以在文件对象的列表/数组上执行该函数。

void file_write(file_object, string_to_write){
   fprintf(file_object, "%s\n", string_to_write);
}

研究

我搜索了Google,观看了几个Youtube教程的部分内容,并搜索了有关SO的相关问题,但以下是我能做到的最好的问题。任何有关如何更好地回答上述问题的建议,具有理想的功能,将不胜感激。

FILE *file_x, *file_y, *file_z, *file_vx, *file_vy

file_x  = fopen("./data/x.dat","w"); 
file_y  = fopen("./data/y.dat","w"); 
file_z  = fopen("./data/z.dat","w"); 
file_vx = fopen("./data/vx.dat","w"); 
file_vy = fopen("./vy.dat","w"); 

fprintf(file_x,  "#X(t) Coordinates\n#Time (t)\n");
fprintf(file_y,  "#Y(t) Coordinates\n#Time (t)\n");
fprintf(file_z,  "#Z(t) Coordinates\n#Time (t)\n");
fprintf(file_vx, "#X(t) Velocities\n#Time (t)\n");
fprintf(file_vy, "#Y(t) Velocities\n#Time (t)\n");

fclose(file_x);
fclose(file_y);
fclose(file_z);
fclose(file_vx);
fclose(file_vy);

1 个答案:

答案 0 :(得分:4)

你声明一个FILE指针然后,你可以声明两个数组,一个用于文件名,一个用于写入它们的数据。制作一个循环并迭代如下:

int main(void)
{
    FILE *file_x;

    const char *dirs[] = { "./data/x.dat",
                           "./data/y.dat",
                           "./data/z.dat",
                           "./data/vx.dat",
                           "./vy.dat"
                         };

    const char *data[] = { "#X(t) Coordinates\n#Time (t)\n",
                           "#Y(t) Coordinates\n#Time (t)\n",
                           "#Z(t) Coordinates\n#Time (t)\n",
                           "#X(t) Velocities\n#Time (t)\n",
                           "#Y(t) Velocities\n#Time (t)\n",
                         };

    for( int n = 0 ; n < 5 ; n++ )
    {
        file_x = fopen(dirs[n],"w");

        if ( !file_x )
        {
            perror(dirs[n]);
            exit(EXIT_FAILURE);
        }
        fprintf(file_x , "%s" , data[n]);

        fclose(file_x);
    }
    return 0;
}