if ステートメントでデータを処理していて、そのデータを非ロケール変数として保持したいので、ステートメントの外で呼び出すことができます。これが実際のコードです。注意してください。それはほとんどアイデアの追放にすぎませんが、すべてのアイデアまたはより良い解決策を歓迎します(提案が現在のレベルに対して高度すぎない場合)...
このコードは、多次元の char 配列 (2 次元) を作成し、それを埋めます。後でそれを呼び出そうとすると、割り当てられていない配列値に到達した結果、プログラムがクラッシュします。
do
{
destRow = ( rand() % ROWS ) + 1; // assigning random placement for destroyer ship
destCol = ( rand() % COLLUMS ) + 1;
destDir = ( rand() % 2 ) + 1;
if ( destDir == 1 ) { //Destroyer: 1 = right
if ( destCol + 1 > COLLUMS ) {
continue;
} else {
char enemyDestroyer[DESTROYER_SIZE][2] = { { board[destCol][0] , board[0][destRow] }, { board[destCol + 1][0] , board[0][destRow] } };
}
} else if ( destDir == 2 ) { //Destroyer: 2 = down
if ( destRow + 1 > ROWS ) {
continue;
} else {
char enemyDestroyer[DESTROYER_SIZE][2] = { { board[destCol][0] , board[0][destRow] }, { board[destCol][0] , board[0][destRow + 1] } };
}
}
destSucces = true;
} while (!destSucces);
ここでは、割り当てが if ステートメントで発生したため、実際には何も設定されていない、上記で設定されたデータを使用して (他のポイントで収集された) プレーヤーの入力をチェックします。
if ( ( input[0] == enemyDestroyer[0][0] && input[1] == enemyDestroyer[0][1] ) || (input[0] == enemyDestroyer[1][0] && input[1] == enemyDestroyer[1][1] ) ) {
cout << "Hit!" << endl;
board[posY][posX] = '!';
getchar();
//setting display damage
if ( input[1] == enemyDestroyer[0][1] ) {
enmDesDisp[0] = '!';
} else if ( input[1] == enemyDestroyer[1][1] ) {
enmDesDisp[1] = '!';
}
} else {
cout << endl << "Splash!" << endl;
}