C Tableau À Deux Dimensions
Je vais demander quelque chose à propos de mon code fourni ci-dessous... Ma question est dans la ligne où il y a un commentaire /*This line*/
. J'ai utilisé la variable y et x: y pour la HAUTEUR et x pour la LARGEUR. La première fois que je lance le programme, le code a été scanf("%d,%d", &y, &x);
mais malheureusement, le programme n'a pas été correctement exécuté. Mais quand j'ai modifié le code avec cette scanf("%d,%d", &x, &y);
, ensuite, j'ai été en mesure d'exécuter le programme à son tour. Je ne comprends pas comment c'est arrivé, depuis que j'avais mis de la y en HAUTEUR et en x LARGEUR?
File Edit Run Compile Project Options Debug Break/watch
╒════════════════════════════════════ Edit ════════════════════════════════════╕
│ Line 1 Col 43 Insert Indent Tab Fill Unindent * C:NONAME.C │
│#define HEIGHT 5 │
│#define WIDTH 10 │
│ │
│char enemy[HEIGHT][WIDTH]= │
│ { {0,0,0,0,0,0,0,0,0,0}, │
│ {0,1,1,0,0,1,0,0,0,0}, │
│ {0,0,0,1,0,1,0,1,1,0}, │
│ {0,0,0,0,0,0,0,0,1,1}, │
│ {0,0,1,1,0,1,0,0,0,1} }; │
│ │
│main() │
│{ │
│ char friend[HEIGHT][WIDTH]; │
│ int x,y; │
│ │
│ clrscr(); │
│ │
│ for(y=0; y<HEIGHT; y++) |
| for(x=0; x<WIDTH; x++) |
| friend[y][x]='.'; |
| |
| while(x >= 0) |
| { |
| for(y=0; y<HEIGHT; y++) |
| { |
| for(x=0; x<WIDTH; x++) |
| printf("%c", friend[y][x]); |
| printf("\n"); |
| } |
| |
| printf("Coordinates: "); |
| scanf("%d,%d", &x, &y); /*This line*/ |
| |
| if(enemy[y][x] == 1) |
| friend[y][x]="\xDB"; |
| else |
| friend[y][x]="\xB0"; |
| } |
|} │
├─────────────────────────────────── Watch ────────────────────────────────────┤
│ │
└──────────────────────────────────────────────────────────────────────────────┘
F1-Help F5-Zoom F6-Switch F7-Trace F8-Step F9-Make F10-Menu NUM
Les valeurs où vous utilisez pour tester cela?
5,2
5 est hors-la-fin. C des tableaux ont zéro indices.
5,2
5 est hors-la-fin. C des tableaux ont zéro indices.
OriginalL'auteur aer | 2011-05-24
Vous devez vous connecter pour publier un commentaire.
Le problème est que les données d'entrée. 5,2 signifiait la ligne 5, colonne 2, et le problème est que la ligne 5 n'existe pas (la Hauteur est de 5, si vous avez des lignes de 0 à 4). Dès que vous avez modifié les valeurs, ils sont devenus 2, 5, qui correctement point à la ligne 2 (troisième ligne) et la colonne 5 (sixième colonne).
Une autre question: Depuis que j'ai mis le array ennemi comme
enemy[5][10]
, et la C des tableaux sont basés sur zéro, serait-il mauvais parce que je initialisé avec 10 colonnes et 5 lignes?c'est pas mal aussi longtemps que vous avez accès dans les segments 0..4, 0..9. Je veux dire, dans votre initialisation vous définissez dix lignes x 5 colonnes, et que vous avez: la seule chose à corriger, c'est que vous avez à retenir pour accéder correctement. Il y a dix lignes numérotées de 0 à 9, mais ne laissez pas le maximum de la ligne, le numéro d'index de vous tromper, il y a encore dix lignes!
Les tableaux en C sont nuls indexés, essentiellement. Ne vois pas comment vieux cette réponse est, désolé...
OriginalL'auteur Baltasarq
Si vous êtes à l'aide de 5 et 2 pour y[HAUTEUR] et x[LARGEUR], Comment cela va fonctionner parce que votre ennemi[HAUTEUR][LARGEUR] tableau est le tableau de 5x10.
C'est lorsque vous êtes à l'aide de 5 pour y qui dépasse sa limite est 0 à 4.
N'est-ce pas.....?
La HAUTEUR est fixée à 5[0-4] et la LARGEUR est de 10[0-9] pour le Tableau de l'ennemi, non? Lorsque vous essayez d'scanf("%d%d",&y,&x); et don de 5 et 2 en HAUTEUR et en LARGEUR. Mais la valeur de y doit être comprise entre 0(Minimum) et 4(maximum). Mais vous donnez 5 qui dépasse sa limite....?
oui, les tableaux en C est à zéro, je l'ai eu. J'ai essayé de régler la HAUTEUR à 6 et la LARGEUR de 11... et puis j'ai modifié la ligne comme
scanf("%d,%d", &y, &x);
. Mais encore, il ne fonctionnait pas correctement.sur mon tableau, est-ce de l'initialisation correcte?
char enemy[5][10] = { {0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,0,1,0,0,0,0}, {0,0,0,1,0,1,0,1,1,0}, {0,0,0,0,0,0,0,0,1,1}, {0,0,1,1,0,1,0,0,0,1} };
Oui, il est 100% correct.
OriginalL'auteur Pushpendra