Affichage d'une matrice dynamique de caractere en C

sassoura Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
sassoura Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -
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);

}
}

6 réponses

  1. 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
  2. sassoura Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. Utilisateur anonyme
     
    Tu n'as corrigé aucun des 3 problèmes que je t'ai signalés. Je ne comprends pas.
    0
  4. sassoura Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. sassoura Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
     
    oki , je vais essayer ,merci pour vos conseils :)
    0