Afficher une grille d'étoiles en C
Résolu
tomdefou
Messages postés
4
Statut
Membre
-
tomdefou Messages postés 4 Statut Membre -
tomdefou Messages postés 4 Statut Membre -
Bonjour,
Je cherche à afficher une grille de caractères "*" en C
Voici ce que j'ai fait :
Et j'obtiens des erreurs en compilant, mais je ne vois pas d'où elles viennent.
Je cherche à afficher une grille de caractères "*" en C
Voici ce que j'ai fait :
#include <stdio.h>
void affichegrille(char grille[][],int,int);
int main(void){
int i,j;
const int imax=4,jmax=4;
char grille[imax][jmax];
for(i=0; i<imax; ++i){
for(j=0; j<jmax; ++j){
tableau[i][j] = '*';
}
}
affichegrille(grille,imax,jmax);
return 0;
}
void affichegrille(char grille[][],int nb_l,int nb_c){
int i,j;
for(i=0; i<nb_l; i++){
for(j=0; j<nb_c; j++) printf("%c",grille[i][j]);
printf("n");
}
}
Et j'obtiens des erreurs en compilant, mais je ne vois pas d'où elles viennent.
4 réponses
-
-
Effectivement, merci de mettre les erreurs ainsi que les lignes.
Mais déjà :
void affichegrille(char grille[][],int,int);
Il faut préciser la dimension de la colonne.
char grille[imax][jmax];
Ok en C ISO C99. Mais, dans le doute utilise plutôt #define pour imax et jmax. Ou malloc/free.
-
J'ai modifié un peu le code :
#include <stdio.h> void affichegrille(char *grille,int,int); int main(void){ int i,j; int imax=4; int jmax=4; char grille[4][4]; for(i=0; i<imax; ++i){ for(j=0; j<jmax; ++j){ grille[i][j] = '*'; } } affichegrille(grille,imax,jmax); return 0; } void affichegrille(char *grille,int nb_l,int nb_c){ int i,j; for(i=0; i<nb_l; i++){ for(j=0; j<nb_c; j++) printf("%c",grille[i][j]); printf("n"); } }
Voici les erreurs obtenues après compilation :
sokoban.c: In function `main':
sokoban.c:16:2: attention : passing argument 1 of `affichegrille' from incompatible pointer type [enabled by default]
sokoban.c:2:6: note: expected `char *' but argument is of type `char (*)[4]'
sokoban.c: In function `affichegrille':
sokoban.c:28:47: erreur: subscripted value is neither array nor pointer nor vector-
C'est bien, tu as modifié ton code, mais t'as pas respecté ce que j'ai dit.
Je répète :
Soit #define, soit malloc. Il n'y a rien de tout ça dans ton code...
De plus, tu mets du char*, il faudrait plutôt mettre du char**. Mais si tu débutes en C, je te conseille plutôt d'utiliser #define IMAX 4, etc.
-
-
@fiddy : j'ai apporté less modifs que tu m'as dit
#include <stdio.h> #define IMAX 4 #define JMAX 4 void affichegrille(char **grille); int main(void){ int i,j; char grille[4][4]; for(i=0; i<IMAX; ++i){ for(j=0; j<JMAX; ++j){ grille[i][j] = '*'; } } affichegrille(grille); return 0; } void affichegrille(char **grille){ int i,j; for(i=0; i<IMAX; i++){ for(j=0; j<JMAX; j++) printf("%c",grille[i][j]); printf("\n"); } }
Quand je compile j'obtiens ca :
sokoban.c: In function `main':
sokoban.c:16:2: attention : passing argument 1 of `affichegrille' from incompatible pointer type [enabled by default]
sokoban.c:4:6: note: expected `char **' but argument is of type `char (*)[4]'-
char grille[4][4];
Autant mettre : char grille[IMAX][JMAX]; c'est plus portable.
void affichegrille(char **grille)
Il faut mettre : void affichegrille(char grille[IMAX][JMAX]) ou simplement : void affichegrille(char grille[][JMAX]).
C'est ce que j'entendais par "il faut préciser la dimension de la colonne". -
-