【发布时间】:2021-01-05 10:24:53
【问题描述】:
我对编程很陌生,我需要一些关于如何使用 C 自动命名文件的建议。因为我需要在集群计算机上多次运行相同的源代码。为了防止覆盖同一输出文件,我必须让每个输出文件具有不同的名称。
void RecordNumber()
{
srand(time(NULL));
FILE* fopen(), * fp;
char name[64];
int x, y;
long num[256];
int na = rand();
sprintf(name, "num[%d].dat", na);
if (first_num) {
first_num = 0;
fp = fopen(name, "w");
}
else
fp = fopen(name, "a");
for (x = 0; x <= species; ++x)
num[x] = 0;
for (x = 1; x <= xfield; ++x)
for (y = 1; y <= yfield; ++y)
++num[state[x][y]];
fprintf(fp, "\n%d", thetime);
for (x = 0; x < species; ++x)
fprintf(fp, "\t%d", num[x]);
fclose(fp);
}
我写了一个int“na”来存储一个随机数,但是随机数没有显示在文件名中(文件名还是“dat”)。
void RecordNumber() 存储在库中。在我的一个代码中,我使用 void Report(){} 调用 RecordNumber(0) 函数来记录模拟中的所有数字
void Report()
{
for (int j=j=thetime;j<=10000;j=j+1)
{
if (j%100==0)
{EchoTime(0);
CountSpecies(0);
RecordNumber(0);
}
else
break;
}
}
我希望文件名看起来像“dat_%d”,我该怎么办?
【问题讨论】:
-
此代码应按命名创建文件。创建的文件的确切名称是什么?如果你打印
name,你会得到什么?此外,在文件名中使用方括号也不是一个好主意,因为它们可能会被 shell 使用。考虑改用下划线,即num_%d.dat。 -
我重新格式化了您的代码,使其可读。不过它应该可以工作。
-
哦:这是什么:
FILE* fopen(), * fp;??应该是FILE* fp; -
另外你需要检查
fopen是否成功,如果没有,你需要打印错误信息并中止程序。 -
void RecordNumber()是 C++,或者来自 1987 年。使用void RecordNumber(void)
标签: c file fopen file-rename void-pointers