• ベストアンサー

fgetsがうまくいきません。

半角スペースとOで(O = 生存)ライフゲームを作ろうと思っていますが、 printf文で表示するとうまくいきません。 どうしたらよいでしょうか。回答お願いします。 #include<stdio.h> #include<stdlib.h> #define SIZE 20 int main(void) { int i = 0; char board[ SIZE ][ SIZE+1 ]; FILE *fp; if( ( fp = fopen( "life.dat", "r" ) ) == NULL ) { printf("ファイルが見つかりません。---life.dat\n"); exit(EXIT_FAILURE); } for(i = 0; i < SIZE; i++)//初期設定 { fgets( *(board + i) , SIZE+1, fp ); }//初期設定終わり for(i = 0; i < SIZE; i++) { printf("%s", *(board + i) ); } return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

推測するに、20×20のデータなんですよね。 fgetsは、改行を捨てないので、 改行の分と'\0'の分とで char board[SIZE][SIZE+2]; としてやればうまくいくと思います。

bf109e
質問者

お礼

回答ありがとうございます。 board[ SIZE ][ SIZE + 2 ] とすることによってうまく表示されました。

bf109e
質問者

補足

それで追加質問をお願いしてよろしいでしょうか。 Enterを押すごとにボードの次の時刻の状態を 表すようにしたいのですがうまくいきません。 アドバイスよろしくお願いします。 char n; for( ;; ) { printf("Press Enter\n") scanf("%c", &n); if(n == '\n') /*次の状態の表示*/ else break; }

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

#4補足>Enterを押すことによって… 一文字入力待ちがうまくできないということだったら、 #5さんのようにgetcharを使えばいいと思います。

bf109e
質問者

お礼

回答ありがとうございます。 おかげでうまくいくことができました。

すると、全ての回答が全文表示されます。
  • keikan
  • ベストアンサー率42% (75/176)
回答No.5

scanf()でなくて n = getchar(); ではどうですか?

bf109e
質問者

お礼

回答ありがとうございます。 おかげでうまくいくことができました。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>ボードの次の時刻の状態を 次の時刻の状態は、着目しているセルの回りの状態によるので、 最低限、そのセルが他から必要とされなくなるまで前の状態を保持(更新できない)しないといけませんが、そういう風につくると難しくなるので、 単純に、更新用(次世代)のボードを用意して、そこに、現在の状態から次世代の状態を計算して書き込んでいくといいんじゃないでしょうか。 そういうことではなくて、もっと細かい話なのでしょうか? そういうことではなくて、コンソール上に表示された、ものを座標指定で更新していく方法がわからんということでしょうか? コンソールで表示されているものを部分的に変更するのは、 DOSのプログラムでは、(ANSIで)エスケープシーケンスでやっていましたが、今は、(windowsのコンソールでは)うまくないようです。 UNIX系では、やったことはないですが、コンソール表示用のライブラリが使えると思いました

bf109e
質問者

補足

説明不足ですみません。 次の時刻の状態の決定は問題ないのですが、 それをEnterを押すことによってくりかえし表示させていくやり方がわかりません。 アドバイスお願いします。

すると、全ての回答が全文表示されます。
回答No.3

う~ん。 とりあえず入力行と、それに対する出力行と 想定している出力結果を書いてもらえると 回答しやすいかと思いますです。

bf109e
質問者

お礼

回答ありがとうございます。

bf109e
質問者

補足

例えば SIZE 5 とすると、ファイルには ________ O OOO ________ のように書かれています。 とりあえず、これをそのまま表示しようと思っていましたが うまくできませんでした。

すると、全ての回答が全文表示されます。
回答No.1

確認していないので悪しからず。 fgets( *(board + i) , SIZE+1, fp );   ↓ fgets( *(board + i*SIZE) , SIZE+1, fp ); printf("%s", *(board + i) );   ↓ printf("%s", *(board + i*SIZE) ); でないかしら?

bf109e
質問者

お礼

回答ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A