我试图写一个能节省" 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;的数组,感谢所有的帮助!
答案 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
→确认文件已被打开。