-3

コードに問題があります。ユーザーがサイズ変更した動的フレームがあり、このフレーム内の 1 つのセルの位置を入力する必要があります。私の質問は、このポジションが有効であること、またはまだ入力されていないことを確認するにはどうすればよいですか?

コードは次のとおりです。

for (i = 0; i < a; i++)
{
    while (x < 1 || y < 1)
    {
        printf("Entrez les coordonnees de la cellule %d: ", i+1); //The user gives the position of the cell
        scanf("%d %d", &x, &y);
    }

    tab[x - 1][y - 1] = 1; //We affect 1 to the cell given by the user
}
4

2 に答える 2

1

行列memset全体をゼロに設定するために使用できます。tab

ユーザーがすでにこの座標を入力したかどうかを確認したい場合は、

あなたはif(tab[x-1][y-1] != 0)、座標が有効であることを確認するために、あなたが作ることができます

while(true){
   ....
   scanf("%d %d", &x, &y);
   if(x > 1 && x < X_MAX && y > 1 && y < Y_MAX){
     if(tab[x-1][y-1] != 0)
        printf("This coordinate was already typed.\n");
     else
        break;
    }
 }
 tab[x-1][y-1] = 1;

X_MAX と Y_MAX は、tab行列の最大境界 (サイズ) を指定します

于 2013-01-25T14:57:22.380 に答える
0

のサイズがtabそれぞれ N と M であると仮定すると、次のことができます。

if (x < 0 || x>= N || y < 0 || y >= M) {
  printf("O-oh fell out of the field\n!");
  .. do stuff ...
}

フィールドが既に入力されているかどうかについては、どのフィールドが既に入力されているかを記憶するアルゴリズムを考案する必要があります。フィールドがすでに入力されているかどうかを示すブール値を持つもう 1 つのマトリックスを作成するか、ハッシュ テーブルを使用して入力された座標のペアを格納します。

于 2013-01-25T14:57:59.837 に答える