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.
A voir également:
- Afficher une grille en c
- Afficher appdata - Guide
- Afficher google en page d'accueil - Guide
- Afficher taille dossier windows - Guide
- Grille tombola vierge à imprimer 50 cases - Télécharger - Création musicale
- Windows 11 afficher d'autres options - Guide
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.
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 :
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
#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.
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
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]'
#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".
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".