Afficher une grille d'étoiles en C

Résolu
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 :
#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. Utilisateur anonyme
     
    Bonjour,

    il donne quoi comme erreurs ?
    0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  3. tomdefou Messages postés 4 Statut Membre
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  4. tomdefou Messages postés 4 Statut Membre
     
    @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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. tomdefou Messages postés 4 Statut Membre
       
      Merci, ça marche maintenant.
      0