Affichage d'une matrice dynamique de caractere en C

sassoura Messages postés 23 Statut Membre -  
sassoura Messages postés 23 Statut Membre -
Bonjour,

ne veut pas executer svp puvez vous m'aider ,merci bien

grille1 =(casee**)malloc(c*sizeof(casee));
for (int v=0;v<c;v++)
{
grille1[v]=(casee*)malloc(l*sizeof(casee));
}
for (int i=0;i<=c;i++)
{ for (int j=0;j<=l;j++)

{
(grille1[i][j].occupied)->b='*' ;
printf("%c",(grille1[i][j].occupied)->b);

}
}

A voir également:

6 réponses

Utilisateur anonyme
 
Bonjour

On n'a ici qu'un petit bout du code, on ne peut pas tout vérifier mais déjà :
Ton premier malloc semble incorrect. D'après ton casting (casee**) tu alloues des casee*. Tu devrais donc avoir sizeof (casee*) et non pas sizeof(casee)
En ce qui concerne l'affichage, il te manque un saut de ligne à la fin de chauque ligne.
Et si l correspond à ligne et c à colonne, tu as inversé les deux.
0
sassoura Messages postés 23 Statut Membre
 
bon nous voulons programmer un jeu "Demineur" il n'est pas fini c'est que le debut
nous avons arrivé à ca

#include <stdio.h>
#include <stdlib.h>

typedef struct occup occup;
struct occup
{
int a;
char b;

} ;

typedef struct casee casee;
struct casee
{
occup* occupied;
int i;
int j;
};

/*programme principale*/
int main()
{int l,c;
char ch;
casee **grille2=NULL;
casee **grille1=NULL;

printf("\n");
printf(" ________________________________\n");
printf("| \t \t \t \t | \n");
printf("| \t BIENVENUE \t \t | \n");
printf(" \n\n");
printf("| Au Jeu du demineur \n");
printf("|________________________________|\n\n\n");

printf("\n \t Voulez-vous choisir votre Grille de jeux!!\n \n si oui tapez 'o' sinon 'n' \n\n");
printf("votre reponse ="); scanf("%c",&ch);
if(ch=='n')
{
printf(" voila notre proposition : \n\n ");
printf(" \t | ");
for(int i=1;i<=9;i++)
{
printf("%d ",i);
}
printf("\n");
printf("\t ---------------------\n");
for(int k=1;k<=9;k++)
{
printf("\t %d|",k);
printf(" * * * * * * * * * \n ");
}
printf("\n\n");
}
else { if (ch=='o')
{
printf(" \t Donnez votre choix de grille\n s'il vous plait donnez le nombre du ligne et du colonne entre[10..300] \n");
printf("nombre de ligne l=");
scanf("%d",&l);
printf("nombre de colonne c=");
scanf("%d",&c);
grille2 =(casee**)malloc(c*sizeof(casee));
for (int v=0;v<c;v++)
{
grille2[v]=(casee*)malloc(l*sizeof(casee));
}
grille1 =(casee**)malloc(c*sizeof(casee));
for (int v=0;v<c;v++)
{
grille1[v]=(casee*)malloc(l*sizeof(casee));
}
for (int i=0;i<=c;i++)
{ for (int j=0;j<=l;j++)

{
(grille1[i][j].occupied)->b='*' ;
printf("%c",(grille1[i][j].occupied)->b);

}
}

printf("\n ooops !! essayez-vous plus tard :p\n\n ");
}
}

system("pause");
return 0;

}
0
Utilisateur anonyme
 
Tu n'as corrigé aucun des 3 problèmes que je t'ai signalés. Je ne comprends pas.
0
sassoura Messages postés 23 Statut Membre
 
je doix ecrire comme ca? ,mais j'ai pas compris pourquoi il faut inverser c et l ?

grille2 =(casee**)malloc(l*sizeof(casee*));
for (int v=0;v<l;v++)
{
grille2[v]=(casee*)malloc(c*sizeof(casee*));
}
grille1 =(casee**)malloc(l*sizeof(casee*));
for (int v=0;v<l;v++)
{
grille1[v]=(casee*)malloc(c*sizeof(casee*));
}
for (int i=0;i<=l;i++)
{ for (int j=0;j<=c;j++)

{
(grille1[i][j].occupied)->b='*' ;
printf("%c \ n",(grille1[i][j].occupied)->b);

}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Non, il ne faut pas écrire comme ça.
Tu as lu "Tu devrais donc avoir sizeof (casee*) et non pas sizeof(casee) " sans lire pourquoi, alors tu l'as fait partout. Or, il ne faut pas le faire partout.
Je t'ai dit d'ajouter un changement de ligne, tu en ajoutes à chaque caractère. Là encore, c'est absurde. Ne fais rien sans comprendre pourquoi.
Quant à l'inversion ligne- colonne, il suffit de regarder comment tes boucles sont imbriquées pour voir que tu vas écrire sur une même ligne (quand tu auras correctement mis ton saut de ligne) des éléments d'indice de ligne différent mais avec le même indice de colonne.
Je m'aperçois en plus que tu utilises le pointeur occupied sans jamais l'avoir initialisé. D'ailleurs, je ne vois pas très bien l'intérêt de définir ce champ de casee comme un occup * , un occup sans * serait plus simple.
0
sassoura Messages postés 23 Statut Membre
 
oki , je vais essayer ,merci pour vos conseils :)
0