0

私はこの演習をしなければなりません:

2 つの NxN サイズの整数の配列が与えられた場合に、行がすべて同じ要素 (場所が異なっていても) を持つ場合は true を返し、そうでない場合は false を返す C++ 関数を記述します。

これは私のコードです:

#include <iostream>

using namespace std;

const int N = 5;


bool fool ( const int a [N][N])
{
    int x,y = 0;
    int j=0;
    int i=0;

    bool check[N] = {false};
    bool verify = false;

    for (i=0; i<N; i++)
    {

       check[i] = false;

    }

       while(j<N && !verify )
       {

         if(a[x][i]==a[y][j] && !check[j] )
         {

            check[j]=true;
            verify=true;
         }

         j++;

       }

       return verify;

}


int main ()
{


    const int a[N][N] = {{1,3,5,6,7},
                         {5,6,7,1,3},
                         {1,6,5,3,7},
                         {6,1,3,5,7},
                         {6,5,1,7,3}};




    if ( fool(a))
    {

           cout << " in all rows there are the same elements";

    }


    else
    {

           cout << " wrong, . ";

    }

    return 0;


}

しかし、プログラムはクラッシュします。どうすれば修正できますか?

4

2 に答える 2

3
while( int j<N && !verify )

jループ内で宣言しないでください。ループ外で宣言する必要があります。これがコンパイルされることにも驚いています (Visual Studio C++ ではコンパイルされません)。

于 2012-04-27T12:04:37.073 に答える
2

クラッシュのことはしばらく忘れてください。多くのコンパイルエラーがあります。

1)

bool check[N] = false; 

次のようにする必要があります。

bool check[N] = {false}

i2)ループ内で宣言するforと、そのスコープはループに限定されます

for ( int i=0; i<N; i++)

ifただし、ループ外のステートメントでアクセスします。それはうまくいきません。これを修正するには、ループの外で変数を宣言します。

3) 以下は誤りです。

while( int j<N && !verify )

これを修正するにはj、ループの外で変数を宣言します。

考えられるクラッシュの原因:

変数jとは初期化さxyておらず、ゴミが含まれています。

于 2012-04-27T12:07:46.573 に答える