2016-09-23 1 views
0

J'essaie de créer un code qui affiche un damier/échiquier. J'ai donné un numéro à chaque case du damier, afin que je puisse choisir manuellement la position des pièces pour la programmation future. Voilà ce que je suis:preview Tableau 2d 8x8 ne fonctionne pas c

#include <stdio.h> 
//{",",",",",",","}, 
void main() 
{ 
int board[8][8] = { 
{'1','2','3','4','5','6','7','8'}, 
{'9','10','11','12','13','14','15','16'}, 
{'17','18','19','20','21','22','23','24'}, 
{'25','26','27','28','29','30','31','32'}, 
{'33','34','35','36','37','38','39','40'}, 
{'41','42','43','44','45','46','47','48'}, 
{'49','50','51','52','53','54','55','56'}, 
{'57','58','59','60','61','62','63','64'} 
}; 

     /* Display the checkerboard */ 
printf("\n\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[0][0], board[0][1], board[0][2], board[0][3], board[0][4], board[0][5], board[0][6], board[0][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[1][0], board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[2][0], board[2][1], board[2][2], board[2][3], board[2][4], board[2][5], board[2][6], board[2][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[3][0], board[3][1], board[3][2], board[3][3], board[3][4], board[3][5], board[3][6], board[3][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[4][0], board[4][1], board[4][2], board[4][3], board[4][4], board[4][5], board[4][6], board[4][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[5][0], board[5][1], board[5][2], board[5][3], board[5][4], board[5][5], board[5][6], board[5][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[6][0], board[6][1], board[6][2], board[6][3], board[6][4], board[6][5], board[6][6], board[6][7]); 
printf("---+---+---+---+---+---+---+---\n"); 
printf(" %c | %c | %c| %c | %c | %c | %c | %c \n", board[7][0], board[7][1], board[7][2], board[7][3], board[7][4], board[7][5], board[7][6], board[7][7]); 

} 

C'est la sortie:

1 | 2 | 3| 4 | 5 | 6 | 7 | 8                                       

---+---+---+---+---+---+---+---                                      

9 | 0 | 1| 2 | 3 | 4 | 5 | 6                                       

---+---+---+---+---+---+---+---                                      

7 | 8 | 9| 0 | 1 | 2 | 3 | 4                                       

---+---+---+---+---+---+---+---                                      

5 | 6 | 7| 8 | 9 | 0 | 1 | 2                                       

---+---+---+---+---+---+---+---                                      

3 | 4 | 5| 6 | 7 | 8 | 9 | 0                                       

---+---+---+---+---+---+---+---                                      

1 | 2 | 3| 4 | 5 | 6 | 7 | 8                                       

---+---+---+---+---+---+---+---                                      

9 | 0 | 1| 2 | 3 | 4 | 5 | 6                                       

---+---+---+---+---+---+---+---                                      

7 | 8 | 9| 0 | 1 | 2 | 3 | 4 

avec des avertissements comme:

main.c:13:37: warning: multi-character character constant[-Wmultichar]                   
{'57','58','59','60','61','62','63','64'} 

Il ressemble à un personnage ne peut pas imprimer plus alors 9 ?! Ce que je voulais, c'était un aperçu simple d'un damier (avec un tableau 2d). J'ai essayé de changer certaines parties de ce code, mais sans aucune chance ... Des idées?

+0

vous devez deux cotés des chaînes non caractères et format% 2s dans une boucle. Sérieusement, vous ne pouvez pas copier/coller des lignes et des lignes de printf comme ceci. –

+1

Supprimer toutes les guillemets simples et utiliser '"% d "' dans votre 'printf' –

+0

' int' n'est pas 'char'. Les littéraux de caractères multi-symboles n'ont aucun sens. D'où l'avertissement du compilateur. Cela n'a pas non plus de sens d'avoir une table de correspondance avec seulement des nombres adjacents, vous pouvez les calculer en temps d'exécution. – Lundin

Répondre

3

vous ne pouvez pas mettre une chaîne en caractères entre guillemets simples. Doit être un caractère unique. Mais il n'a pas de sens à coder une liste d'entiers consécutifs dans les chaînes, donc:

Une double boucle simple avec une formule est beaucoup plus compact et permet d'économiser beaucoup de copier/coller:

#include <stdio.h> 
void main() 
{ 
int i,j; 

     /* Display the checkerboard */ 
    printf("\n\n"); 
    for (i=0;i<8;i++) 
    { 
     for (j=0;j<8;j++) 
     { 
     printf("%3d ",i*8+(j+1)); 
     } 
     printf("\n---+---+---+---+---+---+---+---\n"); 

    } 
    } 

résultat :

1 2 3 4 5 6 7 8 
---+---+---+---+---+---+---+--- 
    9 10 11 12 13 14 15 16 
---+---+---+---+---+---+---+--- 
17 18 19 20 21 22 23 24 
---+---+---+---+---+---+---+--- 
25 26 27 28 29 30 31 32 
---+---+---+---+---+---+---+--- 
33 34 35 36 37 38 39 40 
---+---+---+---+---+---+---+--- 
41 42 43 44 45 46 47 48 
---+---+---+---+---+---+---+--- 
49 50 51 52 53 54 55 56 
---+---+---+---+---+---+---+--- 
57 58 59 60 61 62 63 64 
---+---+---+---+---+---+---+--- 

version améliorée avec un meilleur cadrage (juste pour le fun)

#include <stdio.h> 
void main() 
{ 
int i,j; 

    /* Display the checkerboard */ 
printf("\n\n\n|---+---+---+---+---+---+---+---+\n"); 

for (i=0;i<8;i++) 
{ 
    printf("|"); 
    for (j=0;j<8;j++) 
    { 
     printf("%2d |",i*8+(j+1)); 
    } 
    printf("\n|---+---+---+---+---+---+---+---+\n"); 

} 

}

résultat

|---+---+---+---+---+---+---+---+ 
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
|---+---+---+---+---+---+---+---+ 
| 9 |10 |11 |12 |13 |14 |15 |16 | 
|---+---+---+---+---+---+---+---+ 
|17 |18 |19 |20 |21 |22 |23 |24 | 
|---+---+---+---+---+---+---+---+ 
|25 |26 |27 |28 |29 |30 |31 |32 | 
|---+---+---+---+---+---+---+---+ 
|33 |34 |35 |36 |37 |38 |39 |40 | 
|---+---+---+---+---+---+---+---+ 
|41 |42 |43 |44 |45 |46 |47 |48 | 
|---+---+---+---+---+---+---+---+ 
|49 |50 |51 |52 |53 |54 |55 |56 | 
|---+---+---+---+---+---+---+---+ 
|57 |58 |59 |60 |61 |62 |63 |64 | 
|---+---+---+---+---+---+---+---+ 

toujours pas une maîtrise art ASCII mais mieux :)

+0

Oui vous avez raison, cela rend le code plus compact! Et vos compétences ASCII-art semble bien; P –

1

Remplacez votre définition de la carte 'xx' =>xx:

int board[8][8] = { 
{1,2,3,4,5,6,7,8}, 
    .... 
{57,58,59,60,61,62,63,64} 
}; 

Modifier la printf mise en forme (%c =>%2d)

printf(" %2d | %2d | %2d | %2d | %2d | %2d | %2d | %2d \n", board[1][0], board[1][1], board[1][2], board[1][3], board[1][4], board[1][5], board[1][6], board[1][7]); 
.... 

Note:

  • Lorsque vous écrivez int foo = '0';, vous demandez au compilateur de stocker la valeur du caractère '0' dans la variable foo.

    La valeur du caractère '0' est différente de 0.

  • Lorsque vous écrivez int foo = '10';, votre compilateur vous dit qu'il ne comprend pas ce que vous entendez, parce que si '0' et '1' sont des personnages, '10' ne veut rien dire.

  • %c et %d sont différentes dans printf:

    • printf("%c", foo); demandera d'imprimer le caractère dont le code est foo

    • printf("%d", foo); demandera d'imprimer la valeur de foo

    • printf("%c", 'a'); vous demandera d'imprimer le caractère a
    • printf("%d", 'a'); demandera d'imprimer de la valeur de caractère a
+1

Pourquoi voudriez-vous jamais avoir une table de consultation avec des nombres adjacents, mais constants? Il ne semble pas que ces nombres changeront jamais, car leur but est d'énumérer des carrés. – Lundin

+0

Merci, ces dernières notes sont vraiment utiles –