这可能是一个微不足道的问题。我不是一个专业的程序员,我而是一个正在使用 C 做一些数值实验的数学家。我想要我的输出
针对不同的参数值将实验写入不同的文件中。 MWE 应该做这样的事情。创建一个由 i 索引的文件指针。打开名为 file[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;
}
Edit:我得到了几个不错的答案,但有人可以帮助解决 sprintf 问题吗?即在 OpenBSD 上我不推荐使用 sprintf。所以我收到这条消息
$ 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;
}