这可能是微不足道的问题。我不是一个专业的程序员,我是一个正在使用 C 做一些数值实验的数学家。我希望我的实验的输出被写在不同的文件中,用于不同的参数值。MWE 应该做这样的事情。创建一个由 i 索引的文件指针。打开一个名为 file[i] 的文件。将 i 写入该文件,然后将其关闭。下面的代码显然无法编译。这样的建筑甚至可能吗?
#include<stdio.h>
int i;
int
main()
{
for (i = 0; i < 10; i++){
FILE *f(i);
f(i)=fopen("file"[i],"w");
fprintf(f(i),"%d \n", i);
fclose(f(i));
}
return 0;
}
编辑:我得到了几个不错的答案,但有人可以帮助解决 sprintf 问题。即不推荐在我使用 sprintf 的 OpenBSD 上。所以我收到了这条消息
$ gcc test.c
/tmp//ccN31aTv.o(.text+0x41): In function `main':
: warning: sprintf() is often misused, please use snprintf()
当我用 snprintf 替换 sprintf 时,我收到各种警告
$ gcc test.c
test.c: In function 'main':
test.c:9: warning: passing argument 2 of 'snprintf' makes integer from pointer without a cast
test.c:9: warning: passing argument 3 of 'snprintf' makes pointer from integer without a cast
对我来说,这看起来不是一个高质量的代码。
最终解决方案:我只想记录最终解决方案。ProPolice 和 systrace 对 OpenBSD 上的这段代码很满意。感谢所有帮助过的人!
#include<stdio.h>
int i;
char buf[20];
int
main()
{
for (i = 0; i < 10; i++){
snprintf(buf, sizeof(buf), "filename%d", i);
FILE *f = fopen( buf, "w");
fprintf(f,"%d \n", i);
fclose(f);
}
return 0;
}