これはおそらく些細な質問です。私はプロのプログラマーではなく、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の問題を解決するのを手伝ってくれます. つまり、私が使用する OpenBSD では sprintf は推奨されません。だから私はこのメッセージを受け取ります
$ gcc test.c
/tmp//ccN31aTv.o(.text+0x41): In function `main':
: warning: sprintf() is often misused, please use snprintf()
sprintf を snprintf に置き換えると、あらゆる種類の警告が表示されます
$ 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;
}