Afficher une grille d'étoiles en C

Résolu
Bonjour,

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

  1. Bonjour,

    il donne quoi comme erreurs ?
    0
    1. Contributeur
      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.
      0
      1. 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
        0
        1. Contributeur
          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.
          0
      2. @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]'
        0
        1. Contributeur
          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".
          1
        2. Merci, ça marche maintenant.
          0