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.

A voir également:

4 réponses

Utilisateur anonyme
 
Bonjour,

il donne quoi comme erreurs ?
0
fiddy Messages postés 11653 Statut Contributeur 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
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
fiddy Messages postés 11653 Statut Contributeur 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
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
fiddy Messages postés 11653 Statut Contributeur 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
tomdefou Messages postés 4 Statut Membre
 
Merci, ça marche maintenant.
0