-3

「X」個の単純なテキストファイルを保存するプログラムを作成しようとしていますが、X はプログラムの実行後にユーザーが決定します。次の 2 つの問題を解決する方法について、ネット上でヘルプが見つからないようです。そのため、ヒントをいただければ幸いです。

1) テキストファイルの数がわからない場合、プログラムの開始時にこれらのテキストファイルを宣言するにはどうすればよいですか?

  • これまでのところ、私は使用に慣れています:

    FILE* outfile;
    
  • しかし、私が本当に必要としているのは:

    FILE* outfile_0, outfile_1, outfile_2... outfile_X;
    
  • 頭に浮かぶ解決策はループのように見えますが、これがうまくいかないことはわかっています!

    for (i=0;I<X;i++){
        FILE* outfile_i     // obviously, this just literally calls it "outfile_i" 
    }
    

2) どのように名前を付けますか?

  • 「textfile_1、textfile_2」などの単純な名前を付けたいのですが、次を使用してそれがどのように可能になるかわかりません。

    outfile=fopen("C:\\textfile.txt","w");
    
  • 繰り返しますが、おそらくループ (?!) を作成することを考えましたが、これが機能しないことはわかっています。

    for(i=0;i<X;i++){
        outfile_i=fopen("C:\\textfile_i.txt","w");
    }
    

プログラムを実行する前に、変数「X」が何であるかを知る方法はまったくありません。

編集:問題は解決しました-「FILE*」の配列を作成できることを知りませんでした。すべての助けに感謝します!

4

5 に答える 5

1

このようなものは機能するはずですが、エラー処理とクローズ/解放操作が必要です。

FILE **outfile = malloc(sizeof(FILE*) * X);
for(i=0;i<X;i++){
    char buffer[1024];
    sprintf(buffer, "%s_%d.txt", "textfile", i);
    outfile[i] = fopen(buffer, "w");
}
于 2014-08-20T11:21:23.187 に答える
0

FILE *すべての変数を配列に入れる必要があります。私はするだろう:

char filename[80];
char number[10];

/* Allocate our array */
FILE ** files = malloc((sizeof(FILE *) * X) + 1); /* We allocate a size of X+1 because we'll have X elements + a last NULL element. */

/* Populate our array */
for (int i = 0; i < X; i++)
{
    strcpy(filename,"C:\\textfile_");
    itoa(i, number, 10); /* Here 10 means we use decimal base to convert the integral value. */
    strcat(filename, number);
    strcat(filename, ".txt");

    files[i] = fopen(filename, "w");
}
files[i] = NULL; /* Here we set the last element of our array to NULL (so when we iterate over it we can stop when we encounter NULL). */

次に、次のようにすべてのファイルにアクセスできます。

for (int i = 0; files[i] != NULL; i++)
{
    FILE * current = files[i];
    /* Do something with "current" here. */
}

PS: いくつかのセキュリティ チェックが必要です:
malloc→ 返されないことを確認しNULLます。
itoa→ 出力文字列が有効であることを確認してください。
fopen→ ファイルが開かれたことを確認してください。

于 2014-08-20T11:29:26.923 に答える
0

これはあなたを助けるはずです。

# include <stdio.h>
# include <string.h>
int main ()
{
    char *textfile;
    int i, X;
    textfile = (char *) malloc (128 * sizeof (char));
    FILE *fptr;
    printf ("Enter the value of X: ");
    scanf ("%d", &X);
    for (i=1 ; i<=X ; i++)
    { 
        sprintf(textfile, "textfile_%d.txt", i);
        fptr = fopen (textfile, "w");
        fclose (fptr);
    }
    return 0;
}
于 2014-08-20T11:27:33.130 に答える
0

変数を何らかの構造 (配列、リストなど) に格納し、メモリ内にいくつかの文字列を作成する必要があります。例えば ​​:

#include <stdio.h>

#define X 5

int main() {
  FILE* outfiles[X];
  unsigned short i;
  char fn[32];
  for (i = 0; i < X; ++i) {
    sprintf(fn, "outfile_%u", i);
    outfiles[i] = fopen(fn, "w");
  }
}
于 2014-08-20T11:22:22.450 に答える
0

これを試して-

char buffer[100];
FILE* outfile[X];
for(i=0;i<X;i++){
snprintf(buffer,100,"C:\\textfile_%d.txt",i);

outfile[X]=fopen(buffer,"w");
}
于 2014-08-20T11:24:29.770 に答える