所以我已经实现了生活游戏,现在必须将每个新生成的字段放入gif或pbm中,并在最后使用命令创建动画gif。
下面的函数是给定的,但我没有得到第一个参数,指针const char?我在函数中看到的是文件名,但是我怎么写,我真的很困惑。
static int write_pbm_file(const char *fn, struct game_field *gf) {
int i, j;
FILE *fp;
fp = fopen(fn, "w+");
if(!fp){
printf("unable to open '%s' - '%s'n", fn, strerror(errno));
return -1;
}
fprintf(fp, "P1n");
fprintf(fp, "%cn", gf->length);
fprintf(fp, "%cn", gf->length);
for(i = 0; i < gf->length; i++)
for(j = 0; j < gf->length; j++)
fprintf(fp, "%cn", gf->field[i][j] == 0 ? 48 :
gf->field[i][j] == 1 ? 219 : 197);
fclose(fp);
return 0;
}
这就是我得到上述函数的代码:
while( iterations > 0 ) {
write_pbm_file(..., pstField);
pstField = game_iteration(pstField);
iterations--;
}
我应该写什么来创建这个文件?请帮助
谢谢!
指向不变字符数据的指针最容易通过使用字符串字面值生成:
write_pbm_file("life.pbm", pstField);
您可能想要更改每个迭代的文件名。也许像这样:
char filename[100];
while(...)
{
sprintf(filename, "life-%03d.pbm", iteration);
write_pbm_file(filename, pstField);
这重用了您的iteration
计数器(向后计数),因此要写入的第一个文件将具有最大的数字。我给三个十进制数字加了0-padding,当然我不知道你需要多少次迭代
参数fn
只是文件的路径。在unix系统上,您可以写"/home/someuser/somefile.ext"
,在windows上,您可以写"C:\Some\Path\somefile.ext"
您还可以通过程序参数使其可配置,使用argv[1]
或类似的参数。例句:
int main(int argc, char** argv) {
if (argc < 1) exit(1);
char* filename = argv[1];
...
while( iterations > 0 ) {
write_pbm_file(filename, pstField);
pstField = game_iteration(pstField);
iterations--;
}
}
假设您有一个game_field field
,那么将其写入/home/you/foo.pbm
将是
write_pbm_file("/home/you/foo.pbm", &field);
const char *
是字符串字面值、char *
、const char []
和char []
衰变成的类型。