私は、スコークボード上のある座標への可能な答えをチェックするはずの関数を持っています。しかし、あなたは変数first
に焦点を当てる必要があります。なんらかの理由でfirst
がfalseに設定されていて、なぜ私はその理由がわかりません。この変数がfalseに設定されているのはなぜですか?
機能:
void displayPossible(int board[][9], char input[], int &row, int &col)
{
bool first = true; // variable instantiated and set to true
cout << "First " << first << endl;
bool possible[9]; // I dont touch `first` at all
computeValues(board, possible, row, col); // between these two lines..
cout << "First " << first << endl; // by this point it is false. WHY!?
cout << endl;
cout << "Possible: ";
for(int i = 0; i < 9; i++)
cout << possible[i];
cout << endl;
cout << "First " << first << endl;
cout << "The possible values for '" << input << "' are: ";
// if I say 'first = true' right here, i get my expected outcome
for(int i = 0; i < 9; i++)
{
if(possible[i] && first == true)
{
first = false;
cout << i;
}
else if(possible[i] && first == false)
cout << ", " << i;
else
;
}
cout << endl;
}
出力:
First 1
First 0
Possible: 000010001
First 0
The possible values for 'd1' are: , 4, 8
計算値:
void computeValues(int board[][9], bool possible[], int row, int col)
{
for(int i = 0; i < 9; i++)
possible[i] = true;
for(int iRow = 0; iRow < 9; iRow++)
possible[board[iRow][col]] = false;
for(int iCol = 0; iCol < 9; iCol++)
possible[board[row][iCol]] = false;
for(int iRow = 0; iRow < 2; iRow++)
for(int iCol = 0; iCol < 2; iCol++)
possible[board[row/3*3 + iRow][col/3*3 + iCol]] = false;
if(board[row][col] != 0)
possible[board[row][col]] = true;
}
ほとんどの場合、 'computeValues'にはメモリを上書きするバグがあります。これは' should'の隣のスタック上にあるため、 'first'に影響します。しかし、 'computeValues'のコードなしで言うことは不可能です。 – Jon
あなたは誤って 'computeValues'でそれを上書きしている可能性があります。可能な[]をオーバーフローさせることによって。 'computeValues'を見ることはできますか? – Rup
computeValuesコードを投稿してください。 – kol