Scanf dans une fonction+pointeur sur structure

Fermé
baptiste ottoz - 17 avril 2013 à 16:39
baptiste ottoz Messages postés 2 Date d'inscription mercredi 17 avril 2013 Statut Membre Dernière intervention 18 avril 2013 - 18 avril 2013 à 05:28
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
17 avril 2013 à 19:11
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
baptiste ottoz Messages postés 2 Date d'inscription mercredi 17 avril 2013 Statut Membre Dernière intervention 18 avril 2013
18 avril 2013 à 05:28
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
baptiste ottoz Messages postés 2 Date d'inscription mercredi 17 avril 2013 Statut Membre Dernière intervention 18 avril 2013
17 avril 2013 à 20:15
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
17 avril 2013 à 23:54
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