2012-01-03 2 views
0

私は人生のゲームを実装して、今ではすべての新しい生成フィールドをgifまたはpbmに入れなければなりません。最後にアニメーションgifを作成するコマンドを使用します。Cでの人生のゲーム、どのようにファイルに書き込むのですか?

以下の関数は与えられていますが、最初のパラメータであるポインタconst charを取得できません。私はファイル名である関数を見ていますが、どのように書くのですか、私は本当に混乱しています。

while(iterations > 0) { 
    write_pbm_file(..., pstField); 
    pstField = game_iteration(pstField); 
    iterations--; 
} 

私はこのファイルを作成するためには何を書くべき:私は上記の関数を取得コードです

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, "P1\n"); 
fprintf(fp, "%c\n", gf->length); 
fprintf(fp, "%c\n", gf->length); 

for(i = 0; i < gf->length; i++) 
    for(j = 0; j < gf->length; j++) 
     fprintf(fp, "%c\n", gf->field[i][j] == 0 ? 48 : 
     gf->field[i][j] == 1 ? 219 : 197); 

fclose(fp); 

return 0; 
} 

?助けてください

ありがとう!

答えて

1

非変更文字データへのポインタが、最も簡単だけで文字列リテラルを使用することによって製造することができる。

write_pbm_file("life.pbm", pstField); 

おそらくしかし、反復ごとにファイル名を変更したいです。たぶん、このような何か:

char filename[100]; 

while(...) 
{ 
sprintf(filename, "life-%03d.pbm", iteration); 
write_pbm_file(filename, pstField); 

この(後方カウント)あなたのiterationカウンタを再使用していますので、書き込まれる最初のファイルは最大番号を持つことになります。 3桁の10進数に0パディングを追加しました。もちろん、必要な反復回数はわかりません。あなたと仮定すると

+0

その解決策は完璧です、それは新しいフィールドごとに新しいファイルを作成して動作します。私はLinuxのatmを持っていない、割り当ては、匿名のpbmで変換するために次を与えている: convert -delay 75 -loop 0フィールド* game_of_life.gif 2つの質問:変換はWindows 7 x64では動作しません。その他の方法で? フィールド*の代わりに何を取るべきですか? file-NUM.pbmという10個のファイルがありますか?このコマンドでは何を書きますか? 本当にありがとうございます! – pfu

+0

convertはImageMagickの一部です:http://www.imagemagick.org/script/binary-releases.php#windowsの代わりにフィールド*を試してみてください。* .pbm –

+0

hmはうまく動作しますが、gifは作成されますがアニメーション化されません。 pbmファイルはすべて異なっていますが、GIFは静的です。アニメーションはありません。私のスキルはうそです。私は初心者です^^ – pfu

1

パラメータfnは、単にファイルへのパスです。 UNIXシステムでは、Windows上であなたはあなたがまたargv[1]等を用いて、プログラム引数を通じてそれが設定可能にすることができ"C:\\Some\\Path\\somefile.ext"

を書きたい、"/home/someuser/somefile.ext"を書くかもしれません。例えば:

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--; 
    } 
} 
+0

主な機能では、私は長さ、反復、および因子についてすでに使用しています。しかし、今私は知っているアイデアは知っている! – pfu

1

は、game_field field持っ

write_pbm_file("/home/you/foo.pbm", &field); 

const char *型にその文字列リテラル、char *const char []char []減衰があるだろう/home/you/foo.pbm、たとえば、それを書き出します。

関連する問題