私は戦艦をプレイするプログラムを書いています。 私は戦場を表す文字列行列を持っています。変数をインデックスとして使用してchar * [] []にアクセスすると、要素の内容は(null)
#define NUM_CASELLE 6
char* campo[NUM_CASELLE][NUM_CASELLE];
プログラムの開始時に、行列の各要素は " - "で初期化されます。
私はより良い問題が何であったかを理解するためにいくつかのデバッグを行なったし、私は、この気づいたので、私は問題は行列の要素にアクセスしていることに気づいた:私は
printf("The content is %s\n", campo[3][1]);
を書いた場合、結果は
です内容は -
です。
しかし、私は標準入力から座標を入力し、変数にそれらを覚えている場合、
printf("row is %c\n", row);
printf("col is %d\n", col);
printf("The content is %s\n", campo[row][col]);
結果は次のとおりです。
コンテンツがある(ヌル)
午前間違ってる?
とにかく、エラーが他の場所にある可能性があるため、コード全体を投稿します。 実際には、座標はa3やb5、f1などの戦艦に入力されています。そして、その文字をそれぞれの行インデックスに変換します。
#define NUM_CASELLE 6
#define NUM_NAVI 7
int pos_size = 256;
char* campo[NUM_CASELLE][NUM_CASELLE];
void posizionaNavi(){
char pos[pos_size];
int i = 0;
int col;
int row;
printf("Scegli dove posizionare le navi...\n");
while(i < NUM_NAVI){
printf("Posizionare nave numero %d...\n", i + 1);
fgets(pos, pos_size, stdin);
col = isCommandValid(pos);
row = pos[1];
if(col == -1){
printf("\n");
printf(">> ATTENZIONE: formato errato.\n");
printf(">> Le colonne vanno dalla lettera A alla lettera F\n");
printf(">> Le righe vanno dal numero 1 al numero 6\n");
printf(">> Esempi di comando valido: a3 - b6 - f1\n");
printf("\n");
}
else{
printf("row is %c\n", row);
printf("col is %d\n", col);
printf("The content is %s\n", campo[row][col]);
printf("The content is %s\n", campo[3][1]);
if(campo[row][col] = " - "){
campo[row][col] = " x ";
printf("Nave %d posizionata in %s\n", i + 1, pos);
i++;
}
else{
printf(">> ATTENZIONE: casella già occupata da una nave.");
printf(">> Riprovare...\n");
printf("\n");
}
}
}
}
int isCommandValid(char* pos){
int ret;
if(strlen(pos) != 3 || pos[1] > '6' || pos[1] < '1')
return -1;
switch(pos[0]){
case 'a':
ret = 1;
break;
case 'A':
ret = 1;
break;
case 'b':
ret = 2;
break;
case 'B':
ret = 2;
break;
case 'c':
ret = 3;
break;
case 'C':
ret = 3;
break;
case 'd':
ret = 4;
break;
case 'D':
ret = 4;
break;
case 'e':
ret = 5;
break;
case 'E':
ret = 5;
break;
case 'f':
ret = 6;
break;
case 'F':
ret = 6;
break;
default:
ret = -1;
break;
}
return ret;
}
しますか? –
これは2つの理由から間違っています: 'if(campo [row] [col] =" - "){'。まず、比較演算子は '='ではなく '=='です。次に、文字列を '=='と比較することはできません。あなたは 'strcmp()'を使う必要があります。 – Barmar
私はcampo [3] [1]と入力すると正しくコンテンツが " - "になるはずです –