创建新文件,其名称取决于程序中的变量

时间:2014-08-20 11:14:06

标签: c variables dependent-name

我试图写一个能节省" X"简单文本文件的数量 - 但是,一旦程序运行,X由用户确定。我似乎无法在网上找到有关如何解决以下两件事的任何帮助,因此任何提示都将受到大力赞赏!

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)我如何命名?

  • 我想称它们为简单名称,例如&#34; textfile_1,textfile_2&#34;等,但我不知道如何使用:

    outfile=fopen("C:\\textfile.txt","w");
    
  • 再一次,我想也许会制作一个循环(?!),但我知道这不会起作用:

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

绝对没有办法知道变量&#34; X&#34;是在运行程序之前。

编辑:问题解决了 - 我不知道你可以创建&#34; FILE *&#34;的数组,感谢所有的帮助!

5 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分: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");
  }
}

答案 2 :(得分: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");
}

答案 3 :(得分: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;
}

答案 4 :(得分: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→确认文件已被打开。