Scanf dans une fonction+pointeur sur structure

Bonjour,

je début dans la programmation, j'apprend avec le site du zéro, j'en suis arrive a niveau des structure, j'ai un problème sur un scanf qui saisir sur un pointeur de srtucture voila ce que j'ai code

scanf("%d",&Pointeur_level->nombreDeCoupAJouer);


et la compilation plante a ce niveau je vous mais le reste du code pour le voir dans sont essemble
fichier.c
void paire_impaire_entre_nombre_coup_a_jouer(int paire_impaire,char nomJoueur1,char nomJoueur2,int *Pointeur_nombreMystere,int *Pointeur_level)
{

    paire_impaire = paire_impaire %2;//modulation pour verifier si la variable est paire ou impaire

    if (paire_impaire)
        {
            printf("  %s quelle est le nombre mystere ? ",nomJoueur1);
            scanf("%d",*Pointeur_nombreMystere);
            printf("  en combien de coup vous pense qu'il peut le trouve ? ");
            scanf("%d",&(Pointeur_level->nombreDeCoupAJouer));
            system("cls");
        }
    else
        {
            printf("  %s quelle est le nombre mystere ? ",nomJoueur2);
            scanf("%d",*Pointeur_nombreMystere);
            printf("  en combien de coup vous pense qu'il peut le trouve ? ");
            scanf("%d",*(Pointeur_level->nombreDeCoupAJouer));
            system("cls");
        }
}


main.c

paire_impaire_entre_nombre_coup_a_jouer(paire_impaire,nomJoueur1,nomJoueur2,&nombreMystere,&level);


merci d'avance pour votre reponse

3 réponses

  1. Contributeur
    Bonjour,

    scanf("%d",*Pointeur_nombreMystere);
    Pointeur_nombreMystere est un pointeur donc, il faut mettre : scanf("%d",Pointeur_nombreMystere);

    scanf("%d",*(Pointeur_level->nombreDeCoupAJouer));
    C'est pas * qu'il faut mettre mais &.

    Corrige l'ensemble, recompile. Et si cela ne fonctionne toujours pas, remets ton code ici en indiquant les messages d'erreur/warning du compilateur.
    3
    1. oui car quand je mais

      void paire_impaire_entre_nombre_coup_a_jouer(int paire_impaire,char nomJoueur1,char nomJoueur2,int *Pointeur_nombreMystere,Difficulte *Pointeur_level)


      il ne l'accepte pas mais le compilateur accepte

      void paire_impaire_entre_nombre_coup_a_jouer(int paire_impaire,char nomJoueur1,char nomJoueur2,int *Pointeur_nombreMystereint *Pointeur_level)


      je sait c'est bizarre car au dépare quand j'ai appris les structure on ma bien dit de réceptionne le pointeur avec le nom de la structure ???
      0
      1. bonsoir merci pour ta réponse, j'ai corrige et ça ne marche toujours pas il me marque :

        error: request for member 'nombreDeCoupAJouer' in something not a structure or union

        je te passe les fichiers

        fichier.h

        #ifndef DEF_plus_ou_moins_fonction
        #define DEf_plus_ou_moins_fonction
        #define NOMJOUEUR 15
        //structures
        typedef struct Difficulte Difficulte;
        struct Difficulte
        {
            int MAX;
            int nombreDeCoupAJouer;
        };
        //prototypes
        void reponsePossibleCestPlus();
        void reponsePossibleCestMoins();
        void vousAvaisTrouve(char *nomJoueur1);
        void vousAvaisTrouve1(char *nomJoueur2);
        void paire_impaire_entre_nombre_coup_a_jouer(int paire_impaire,char nomJoueur1,char nomJoueur2,int *Poiteur_nombreMystere,Difficulte *Pointeur_level);
        int Pointeur_sur_paire_impaire_trouve_nombre_mystere (int *Pointeur_paire_impaire,char nomJoueur1,char nomJoueur2);
        int Pointeur_sur_paire_impaire_nombre_coup_jouer (int *Pointeur_paire_impaire,char nomJoueur1,char nomJoueur2,Difficulte);
        #endif // DEF_plus_ou_moins_fonction
        


        fichier.c

        // Génération de reponse possible
        
        void reponsePossibleCestPlus()
        {
        int MAX=5,MIN=1;
        int Reponse=0;
        
        
            Reponse = (rand() % (MAX - MIN + 1)) + MIN;
        
         if (Reponse==1)
            {
            printf("  C est plus\n\n");
            }
         else if (Reponse==2)
            {
            printf("  C est plus perds pas espoir\n\n");
            }
         else if (Reponse==3)
            {
            printf("  C est plus ou la la\n\n");
            }
        else if (Reponse==4)
            {
            printf("  C est plus ha ha\n\n");
            }
         else if (Reponse==5)
            {
            printf("  C est plus tu le fais expres ou quoi ?\n\n");
            }
        }
        
        void reponsePossibleCestMoins()
        {
        int MAX=5,MIN=1;
        int Reponse=0;
        
             Reponse = (rand() % (MAX - MIN + 1)) + MIN;
        
         if (Reponse==1)
            {
            printf("  C est moins\n");
            }
         else if (Reponse==2)
            {
            printf("  C est moins fais gaffe\n");
            }
         else if (Reponse==3)
            {
            printf("  C est moins t es fou\n");
            }
         else if (Reponse==4)
            {
            printf("  C est moins fais un effort\n");
            }
         else if (Reponse==5)
            {
            printf("  C est moins mon vieux\n");
            }
        }
        
        void vousAvaisTrouve(char *nomJoueur1)
        {
        int MAX=5,MIN=1;
        int Reponse=0;
        
             Reponse = (rand() % (MAX - MIN + 1)) + MIN;
        
         if (Reponse==1)
            {
            printf("  C est bien vous avez le nombre mystere %s ^^\n", nomJoueur1);
            }
         else if (Reponse==2)
            {
            printf("  Bravo tu es le mellieur %s :-)\n", nomJoueur1);
            }
         else if (Reponse==3)
            {
            printf("  C est bien tu l'as trouver %s !!\n", nomJoueur1);
            }
         else if (Reponse==4)
            {
            printf("  Bravo mais dis moi tu es un jedi %s\n", nomJoueur1);
            }
         else if (Reponse==5)
            {
            printf("  c est toi le plus fort %s !!\n", nomJoueur1);
            }
        }
        
        void vousAvaisTrouve1(char *nomJoueur2)
        {
        int MAX=5,MIN=1;
        int Reponse=0;
        
             Reponse = (rand() % (MAX - MIN + 1)) + MIN;
        
         if (Reponse==1)
            {
            printf("  C est bien vous avez le nombre mystere %s ^^\n", nomJoueur2);
            }
         else if (Reponse==2)
            {
            printf("  Bravo tu es le mellieur %s :-)\n", nomJoueur2);
            }
         else if (Reponse==3)
            {
            printf("  C est bien tu l'as trouver %s !!\n", nomJoueur2);
            }
         else if (Reponse==4)
            {
            printf("  Bravo mais dis moi tu es un jedi %s\n", nomJoueur2);
            }
         else if (Reponse==5)
            {
            printf("  c est toi le plus fort %s !!\n", nomJoueur2);
            }
        }
        
        void paire_impaire_entre_nombre_coup_a_jouer(int paire_impaire,char nomJoueur1,char nomJoueur2,int *Pointeur_nombreMystere,int *Pointeur_level)
        {
        
            paire_impaire = paire_impaire %2;//modulation pour verifier si la variable est paire ou impaire
        
            if (paire_impaire)
                {
                    printf("  %s quelle est le nombre mystere ? ",nomJoueur1);
                    scanf("%d",Pointeur_nombreMystere);
                    printf("  en combien de coup vous pense qu'il peut le trouve ? ");
                    scanf("%d",&(Pointeur_level->nombreDeCoupAJouer));
                    system("cls");
                }
            else
                {
                    printf("  %s quelle est le nombre mystere ? ",nomJoueur2);
                    scanf("%d",Pointeur_nombreMystere);
                    printf("  en combien de coup vous pense qu'il peut le trouve ? ");
                    scanf("%d",&(Pointeur_level->nombreDeCoupAJouer));
                    system("cls");
                }
        }
        
        int Pointeur_sur_paire_impaire_trouve_nombre_mystere (int *Pointeur_paire_impaire,char nomJoueur1,char nomJoueur2)
        {
        
            Pointeur_paire_impaire %= 2
        
            if (Pointeur_paire_impaire)
                {
                    vousAvaisTrouve1(nomJoueur2);
                    Pointuer_paire_impaire++;
                }
            else
                {
                    vousAvaisTrouve(nomJoueur1);
                    Pointeur_paire_impaire++;
                }
        }
        
        int Pointeur_sur_paire_impaire_nombre_coup_jouer (int *Pointeur_paire_impaire,char nomJoueur1,char nomJoueur2,level)
        {
        
            Pointeur_paire_impaire %= 2
        
            if (Pointeur_paire_impaire)
                {
                    printf("%s vous avez atteint le nombre de coup limite %d coup disponible dammoge !!\n",nomJoueur2,level.nombreDeCoupAJouer);
                    Pointeur_paire_impaire++;
                }
            else
                {
                    printf("%s vous avez atteint le nombre de coup limite %d coup disponible dammoge !!\n",nomJoueur1,level.nombreDeCoupAJouer);
                    Pointeur_paire_impaire++;
                }
        }
        


        main.c

        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>
        #include <string.h>
        #include "plus_ou_moins_fonction.h"
        
        int main ( int argc, char** argv )
        {
        
        //declaration
        int paire_impaire = 0,reponse_partie = 0;
        int nombreMystere = 0, nombreEntre = 0,retourMenu = 0,votrechoix = 0, choixDifficulte = 0,compteur = 0;
        const int MIN = 1;
        char nomJoueur1[NOMJOUEUR];
        char nomJoueur2[NOMJOUEUR];
        Difficulte level;
        
        srand(time(NULL));
        
            //presentation+nom de joueur
            printf ("\n\n     bonjour bienvenu dans mon premiere jeu\n\n"
                    "     nom d'utilisateur : ");
            scanf("%s",nomJoueur1);
            printf ("\n\n     bienvenu %s et bonne partie", nomJoueur1);
        
        //la boucle du programme entier
        do
        {
        
        compteur = 0;// le compteur revien a 0 a chaque nouvelle parti
        
            //choix entre solo et multi
            printf ("\n\n     Le Jeu \n     Plus ou Moins\n\n\n"
                    "     ===== MENU =====\n\n\n\n\n "
                    "  1 = Solo\n"
                    "   2 = Multi\n"
                    "   3 = Quitte le jeu\n\n"
                    "   Votre choix ? : ");
            scanf  ("%d",&votrechoix);
            printf ("\n\n");
        
        switch(votrechoix)
        {
            case 1://solo
        
            paire_impaire=0; //si on a jouer en multi avant
             //difficulte
        
            printf( "     ==Choix Difficulte==\n\n"
                    "  1 = Facile entre 1 et 100 en 12 coup\n"
                    "  2 = Normal entre 1 et 1000 en 11 coup\n"
                    "  3 = Difficile entre 1 et 10000 en 10 coup\n"
                    "  4 = Difficulte personnalise\n\n"
                    "  votre choix ? : ");
            scanf("%d",&choixDifficulte);
            printf ("\n\n");
        
                switch(choixDifficulte)
                {
                    case 1:
        
                        level.MAX=100;
                        level.nombreDeCoupAJouer=12;
        
                    break;
                    case 2:
        
                        level.MAX=1000;
                        level.nombreDeCoupAJouer=11;
        
                    break;
                    case 3:
        
                        level.MAX=10000;
                        level.nombreDeCoupAJouer=10;
        
                    break;
                    case 4:
        
                        printf( "  Niveau de difficulte\n\n  ENTRE LA VALEUR VARIABLE MAX de votre choix et le nombre de coup a jouer\n\n"
                                "  Votre choix de nombre ? : ");
                        scanf("%ld",&level.MAX);
        
                        printf("  nombre de coup ? ");
                        scanf("%d",&level.nombreDeCoupAJouer);
                        printf("\n\n");
        
                    break;
                    default:
        
                        printf("  au revoir");
                        return 0;
        
                    break;
                }
        
            // Génération du nombre aléatoire
            nombreMystere = (rand() % (level.MAX - MIN + 1)) + MIN;
        
            break;
        
            case 2://en multi
        
                printf("  entre le nom du deuxieme joueur : ");
                scanf("%s",nomJoueur2);
        
                printf("\n\n  bienvenu %s et bonne partie\n\n\n\n", nomJoueur2);
                paire_impaire++;
        
            break;
            case 3://quite le jeu
        
                printf ("\n\n      === A beintot les zero ! ===\n\n");
                return 0;
        
            break;
            default:
        
                printf("au revoir");
                return 0;
        
            break;
        }
        
        do //boucle jouer une nouvelle partie
        {
            if (paire_impaire >= 1)
                {
                    //fonction multi paire_impaire
                    paire_impaire_entre_nombre_coup_a_jouer(paire_impaire,nomJoueur1,nomJoueur2,&nombreMystere,&level);
                }
        //La boucle
        do
        {
        compteur++;//Incrémentation du Compteur
        level.nombreDeCoupAJouer--;//décompte
        
            printf("  Quel est le nombre ? ");
            scanf("%ld",&nombreEntre);
        
            if (nombreMystere > nombreEntre)
                {
                    reponsePossibleCestPlus();
                    printf("  encore %d disponible\n\n",level.nombreDeCoupAJouer);
                }
            else if (nombreMystere < nombreEntre)
                {
                    reponsePossibleCestMoins();
                    printf("  encore %d disponible\n\n",level.nombreDeCoupAJouer);
                }
            else if (nombreMystere==nombreEntre)
                {
                    if (paire_impaire >= 1)//mode multi
                        {
                            Pointeur_sur_paire_impaire_trouve_nombre_mystere(&paire_impaire,nomJoueur1,nomJoueur2);
        
                            printf( "voulez vous recommence une pertie\n"
                                    "oui=1\n"
                                    "non=2\n");
                            scanf("%d",&reponse_partie);
                        }
                    else//mode solo
                        {
                            vousAvaisTrouve(nomJoueur1);
                        }
        
                    printf ("  Tu as fini la partie en %ld coups !! \n\n", compteur);
                }
        
            if (level.nombreDeCoupAJouer==0)
                {
                    if(paire_impaire >=1)
                        {
                            Pointeur_sur_paire_impaire_nombre_coup_jouer(&paire_impaire,nomJoueur1,nomJoueur2,level);
        
                            printf( "voulez vous recommence une pertie\n"
                                    "oui=1\n"
                                    "non=2\n");
                            scanf("%d",&reponse_partie);
                        }
                    else
                        {
                            printf("%s vous avez atteint le nombre de coup limite %d coup disponible dammoge !!\n",nomJoueur1,level.nombreDeCoupAJouer);
                        }
                }
        }while (nombreMystere != nombreEntre && level.nombreDeCoupAJouer>=1);
        }while (reponse_partie==1);
        
        
        //proposse de retourne au menu principale
           printf("\n\n   Voulez vous retourner au menu principal?\n\n"
                  "   Oui=1\n"
                  "   Non=2\n\n"
                  "   Votre choix ");
           scanf("%ld",&retourMenu);
        
        }while(retourMenu!=2);
        
        printf ("\n\n      === A beintot les zero ! ===\n\n\n");
        system("PAUSE");
        
        return 0;
        }
        


        merci d'avance de ta réponse
        -1
        1. Contributeur
          Tu considères Pointeur_level comme un int* alors qu'il s'agit d'une structure Difficulte.
          Corrige-ça et ça devrait être mieux.
          0