電子書籍の厳選無料作品が豊富!

半角スペースと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;
}

A 回答 (6件)

推測するに、20×20のデータなんですよね。


fgetsは、改行を捨てないので、
改行の分と'\0'の分とで
char board[SIZE][SIZE+2];
としてやればうまくいくと思います。

この回答への補足

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

補足日時:2005/07/06 19:26
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/06 19:25

#4補足>Enterを押すことによって…


一文字入力待ちがうまくできないということだったら、
#5さんのようにgetcharを使えばいいと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/07 23:55

scanf()でなくて



n = getchar();

ではどうですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/07 23:55

>ボードの次の時刻の状態を


次の時刻の状態は、着目しているセルの回りの状態によるので、
最低限、そのセルが他から必要とされなくなるまで前の状態を保持(更新できない)しないといけませんが、そういう風につくると難しくなるので、
単純に、更新用(次世代)のボードを用意して、そこに、現在の状態から次世代の状態を計算して書き込んでいくといいんじゃないでしょうか。
そういうことではなくて、もっと細かい話なのでしょうか?

そういうことではなくて、コンソール上に表示された、ものを座標指定で更新していく方法がわからんということでしょうか?
コンソールで表示されているものを部分的に変更するのは、
DOSのプログラムでは、(ANSIで)エスケープシーケンスでやっていましたが、今は、(windowsのコンソールでは)うまくないようです。
UNIX系では、やったことはないですが、コンソール表示用のライブラリが使えると思いました

この回答への補足

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

補足日時:2005/07/07 13:16
    • good
    • 0

う~ん。


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

この回答への補足

例えば SIZE 5 とすると、ファイルには
________

O
OOO


________
のように書かれています。
とりあえず、これをそのまま表示しようと思っていましたが
うまくできませんでした。

補足日時:2005/07/06 19:29
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/06 19:38

確認していないので悪しからず。



fgets( *(board + i) , SIZE+1, fp );
  ↓
fgets( *(board + i*SIZE) , SIZE+1, fp );

printf("%s", *(board + i) );
  ↓
printf("%s", *(board + i*SIZE) );

でないかしら?
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/06 19:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!