我想迭代文件对象的列表/数组: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);
答案 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;
}