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
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
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
17 avril 2013 à 19:11
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.
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.
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
18 avril 2013 à 05:28
oui car quand je mais
il ne l'accepte pas mais le compilateur accepte
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 ???
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 ???
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
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
fichier.c
main.c
merci d'avance de ta réponse
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
17 avril 2013 à 23:54
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.
Corrige-ça et ça devrait être mieux.