0

人生ゲームをプログラミングしようとしています。世代を反復しようとすると、ゴミになってしまいます。かなりの数のことを試しましたが、エラーは表示されませんが、明らかにエラーがあります。どんな助けでも大歓迎です。ゲームのロジックを古い配列に適用して新しい配列を作成しようとすると、何か間違っていることはほぼ確実ですが、何がわからないのですか。これは 4 つの機能の 1 つで、他の機能もテストしましたが、この機能に欠陥があると確信しています。最終的な目標は、世代ごとに必要に応じてゲームを拡張および縮小することです。

void iterateGeneration ()
{
ifstream fin;
fin.open("tmp.txt");
ofstream fout;

char **arr=new char * [ROWS];
for(int i=0; i<ROWS; i++)
    arr[i] = new char [COLUMNS];

int lifecheck=0;
//read in current generation from tmp.txt
for(int i=0; i<ROWS; i++)
    {
    fin.getline(arr[i], COLUMNS);
    }
fin.close();

char **new_arr=new char * [ROWS];
for(int i=0; i<ROWS; i++)
    new_arr[i]= new char [COLUMNS];

//count live neighbors, then determine if cell will be alive next generation
for(int i=0; i<ROWS; i++)
    {
    for(int j=0; j<COLUMNS-1; j++)
        {
        lifecheck=0;
        if((i==0 && j==0) || (i==0 && j==(COLUMNS-2)) || (i==(ROWS-1) && j==0) ||     (i==(ROWS-1) && j==(COLUMNS-2)))//corners always stay dead
            {
            lifecheck=0;
            }
        else if(i==0)//special check for first row, only three checks since neighbors     in first row is always dead
            {
            if(arr[i+1][j-1]=='1')
                lifecheck+=1;
            if(arr[i+1][j]=='1')
                lifecheck+=1;
            if(arr[i+1][j+1]=='1')
                lifecheck+=1;
            }
        else if(i==(ROWS-1))//special check for last row
            {
            if(arr[i-1][j-1]=='1')
                lifecheck+=1;
            if(arr[i-1][j]=='1')
                lifecheck+=1;
            if(arr[i-1][j+1]=='1')
                lifecheck+=1;
            }
        else if(j==0)//special check for first column
            {
            if(arr[i-1][j+1]=='1')
                lifecheck+=1;
            if(arr[i][j+1]=='1')
                lifecheck+=1;
            if(arr[i+1][j+1]=='1')
                lifecheck+=1;
            }
        else if(j==(COLUMNS-2))//special check for last column
            {
            if(arr[i-1][j-1]=='1')
                lifecheck+=1;
            if(arr[i][j-1]=='1')
                lifecheck+=1;
            if(arr[i+1][j-1]=='1')
                lifecheck+=1;
            }
        else
            {
            if(arr[i-1][j-1]=='1')
                lifecheck+=1;
            if(arr[i-1][j]=='1')
                lifecheck+=1;
            if(arr[i-1][j+1]=='1')
                lifecheck+=1;
            if(arr[i][j-1]=='1')
                lifecheck+=1;
            if(arr[i][j+1]=='1')
                lifecheck+=1;
            if(arr[i+1][j-1]=='1')
                lifecheck+=1;
            if(arr[i+1][j]=='1')
                lifecheck+=1;
            if(arr[i+1][j+1]=='1')
                lifecheck+=1;
            }
        if(arr[i][j]=='0')
            {
            if(lifecheck==3)
                new_arr[i][j]=='1';
            else
                new_arr[i][j]=='0';
            }
        else if(arr[i][j]=='1')
            {
            if(lifecheck==2)
                new_arr[i][j]=='1';
            else if(lifecheck==3)
                new_arr[i][j]=='1';
            else
                new_arr[i][j]=='0';
            }

        else
            new_arr[i][j]=='0';
        }//2nd for
    }//1st for

fout.open("tmp.txt");

for(int i=0; i<ROWS; i++)
    {
    fout << new_arr[i];
    fout << endl;
    }

for(int p=0; p<ROWS; p++)
    {
    delete [] arr[p];
    delete [] new_arr[p];
    }
delete [] arr;
delete [] new_arr;
}


using namespace std;

const int NUM_GENERATIONS = 1; //set to a smaller number for debugging

int main() 
{
    populateWorld(FILE_NAME);

    showWorld();

    for (int iteration = 0; iteration < NUM_GENERATIONS; iteration++) 
    {

        if (WINDOWS)
           system("cls"); //Windows only
        else
           system("clear"); //Linux only

        iterateGeneration();

        showWorld();
    } 

    if (WINDOWS)
        system("PAUSE");

    return 0;
}

0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000010000000000000000000000000000000000000000000
0000000000000000000000000000001010000000000000000000000000000000000000000000
0000000000000000000011000000110000000000001100000000000000000000000000000000
0000000000000000000100010000110000000000001100000000000000000000000110000000
0000000011000000001000001000110000000000000000000000000000000000000110000000
0000000011000000001000101100001010000000000000000000000000000000000000000000
0000000000000000001000001000000010000000000000000000000000000000000000000000
0000000000000000000100010000000000000000000000000000000000000000000000000000
0000000000000000000011000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000001110000000
0000000000000000000000000000000000000000000000000000000000000000010001000000
0000000000000000000000000000000000000000000000000000000000000000100000100000
0000000000000000000000000000000000000000000000000000000000000000100000100000
0000000000000000000000000000000000000000000000000000000000000000000100000000
0000000000000000000000000000000000000000000000000000000000000000010001000000
0000000000000000000000000000000000000000000000000000000000000000001110000000
0000011000000000000000111000000000000000000000000000000000000000000100000000
0000011000000000000000101000000000000000000000000000000000000000000000000000
0000000000000000000000110000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000011100000
0000000000000000000000000000000000000000000000000000000000000000000011100000
0000000000000000000000000000000000000000000000000000000000000000000100010000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000001100011000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0001100011000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000100010000000000000000000000000000000000000000000000000000000000000000000
0000011100000000000000000000000000000000000000000000000000000000000000000000
0000011100000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000110000000000000000000000
0000000000000000000000000000000000000000000000000001010000000000000001100000
0000000010000000000000000000000000000000000000000001110000000000000001100000
0000000111000000000000000000000000000000000000000000000000000000000000000000
0000001000100000000000000000000000000000000000000000000000000000000000000000
0000000010000000000000000000000000000000000000000000000000000000000000000000
0000010000010000000000000000000000000000000000000000000000000000000000000000
0000010000010000000000000000000000000000000000000000000000000000000000000000
0000001000100000000000000000000000000000000000000000000000000000000000000000
0000000111000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000001100000000000000000000
0000000000000000000000000000000000000000000000000000100010000000000000000000
0000000000000000000000000000000000000000000100000001000001000000001100000000
0000000000000000000000000000000000000000000101000011010001000000001100000000
0000000110000000000000000000000011000000000000110001000001000000000000000000
0000000110000000000000000000000011000000000000110000100010000000000000000000
0000000000000000000000000000000000000000000000110000001100000000000000000000
0000000000000000000000000000000000000000000101000000000000000000000000000000
0000000000000000000000000000000000000000000100000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000

x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`ó!#\00\00 \00\00
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000000
00000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000
00000000000000000000000000000010
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000110000001100000000000011000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000001100000000000011000000000000000000000001
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000110000000
00000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000
00000000000000000010000010
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000001000100000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000110000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000000000000000000
00
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000
00000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000
00000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000100010000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000100000100000
00000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000100000
00000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000011
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000100000000
00000110
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000
00000000000000000000001100
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000000000100010000
00
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000
00000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\001000
00000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000000
00000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000
00001000100000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0011000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000110000000000000000000000
00000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000001100000
00000000100000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000001110000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000000000000000000
00
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000
00000100000100000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000
00000010001000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000000000
00000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000
00000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000001000100000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000100000001000001000000001100000000
00000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000001100000000
00000001100000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000001100000000000000000000000110000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0000000000000000000000000000001100000011000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000101000000000000000000000000000000
00
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000000000000000000000
00000000000000000000
x"#\00\00x"#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\000000
4

2 に答える 2

0

文字の配列全体ではなく、配列の各文字を明示的に出力する必要があります。

fprintf は希望どおりの配列を出力すると思いますが、c++ を使用してから長い時間が経ちました。高校で非常によく似たプログラムを書いて以来、おそらくそうではありません。

于 2013-02-28T23:10:06.413 に答える
0

保存する場所は次のnew_arrとおりです。

for(int i=0; i<ROWS; i++)
    {
    fout << new_arr[i];
    fout << endl;
    }

そして、具体的には、バグは次のとおりです。

    fout << new_arr[i];

achar *を anostreamに送信すると、「ヌル ターミネータ」'\0'文字が見つかるまで、連続する文字が送信されます。

あなたのコードはヌル ターミネータを設定しないため、どの程度の書き込みが行われているかを判断するのは非常に困難です。ガベージ結果に基づくと、多すぎます。

于 2013-02-28T23:10:54.903 に答える