IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

creation menu et saisie utilisateur


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut creation menu et saisie utilisateur
    Bonjour

    J'essaye en vain de récuperer une saisie utilisateur, pour ensuite la comparer
    (et faire un menu basique)

    j'essaye avec getchar et strcmp mais j'ai constamment des erreurs du style
    `strcmp' makes pointer from integer without a cast

    Quelle est la bonne méthode pour récuperer une saisie utilisateur et la comparer ?

    Merci d'avance
    Matthieu

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour!

    Pour la saisie utilisateur :
    http://c.developpez.com/faq/?page=cl...EEN_gets_fgets

    Pour la comparaison :
    strcmp ou strncmp - ne pas oublier l'inclusion de string.h...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    merci pour les infos

    Pourquoi ne pas utiliser scanf ?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Margatthieu Voir le message
    merci pour les infos

    Pourquoi ne pas utiliser scanf ?
    Parce que c'est trop complexe. Si tu y tiens, forme toi :

    http://xrenault.developpez.com/tutoriels/c/scanf/

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    merci Emmanuel, je vais utiliser fgets

    J'utilise le code ci dessous mais il ne demande pas la saisie utilisateur
    il passe directement au printf (...)
    et donc n'affiche rien ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char cResponse[30];
    fgets(cResponse, sizeof cResponse, stdin); 
    printf ("cResponse: %s", cResponse);
    Tu n'aurais pas une idée du pb ?

    Merci
    Matthieu

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Ajoute un fflush(stdout) après le printf

    Sinon pour que le programme te demande la saisie il faut faire juste avant le fgets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    puts("Attente de la saisie utilisateur");

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    ça ne fonctionne toujours pas ... je vois vraiment pas mon erreur ...
    le compilation fonctionne bien

    voici le code complet (juste la fonction)
    j'ai mis en rouge le fgets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    void ajouterModifierPersonne (ListePersonnes *listeP)
    {
    	char cResponse[30];
    	
    	/*On crée une nouvelle personne sans l'ajouter à la liste*/
    	Personne *laNewPersonneP = nouvellePersonne();
    	
    	Personne *personneExistante = rechercherPersonne (listeP, laNewPersonneP->nom);
    
    	/*Si la personne n'existe pas, on la crée et return*/
    	if (personneExistante == NULL)
    		ajouterPersonne (listeP, laNewPersonneP);
    	else
    	{
    		if ( (strcmp(laNewPersonneP->telephone, personneExistante->telephone)) != 0 )
    		{
    			printf ("\n");
    			printf ("La personne existe déja\n");
    			printf ("Le numéro de telephone est différent\n");
    			printf ("Voulez vous remplacer la personne existante ? (Y/N)\n");
    			printf ("\n");
    			
    			/*saisie de la réponse utilisateur*/
    			puts("Attente de la saisie utilisateur");
    			fgets(cResponse, sizeof cResponse, stdin); 
    			printf ("cResponse: %s", cResponse);
    			fflush(stdout);
    			/* code à faire ...*/
    		}
    		else
    		{
    			printf ("\n");
    			printf ("La personne existe déja\n");
    			printf ("Le numéro de telephone est identique\n");		
    		}
    	}
    }
    Est ce que tu vois le pb ?

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tu veux dire que ca affiche 'attente saisie utilisateur' et qu'ensuite ca t'affiche directement 'Creponse' ? Sinon pourquoi déclarer CReponse au tout début autant le faire dans l'alcolade de ton if avant ton fgets.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    oui, c'est ça

    mais je prefererais qu'il attende la saisie d'un caractére ...

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Es-tu sûr qu'il n'y a pas eu une saisie avant ?
    Une saisie qui aurait laissé le \n dans le buffer d'entrée ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    merci Medinoc mais j'ai rajouté un fflush(stdin); juste aprés le puts, et même probleme ...

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    La fonction fflush() n'est définie que pour les flux sortants.

    Ce qui fait que fflush(stdin) est un comportement indéfini, c'est-à-dire un bug.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    et comment je peux m'assurer que le buffer d'entrée soit vide ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    il doit surement y avoir un pb de buffer d'entrée comme tu dis puisque j'ai essayé avec getchar()
    et ça à fonctionné 1 fois et maintenant ça ne fonctionne plus ...

    Qqu'un aurait il une idée ?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 31
    Par défaut
    c'est bon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void purge(void)
    {
    	int c;
    	while((c=getchar())!=EOF && c != '\n')
    	{ }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Reqête avec saisie utilisateur
    Par goutbouyo dans le forum Access
    Réponses: 10
    Dernier message: 07/12/2005, 16h34
  2. [CSS ou HTML] Creation menu
    Par Manio 54 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 19/11/2005, 09h45
  3. Creation menu perso de manière manuelle
    Par pitistef dans le forum MFC
    Réponses: 1
    Dernier message: 03/09/2005, 19h37
  4. [langage] fin de saisie utilisateur
    Par Kinethe dans le forum Langage
    Réponses: 4
    Dernier message: 24/06/2004, 14h19
  5. [langage] saisie utilisateur
    Par caro_du_94 dans le forum Langage
    Réponses: 13
    Dernier message: 03/06/2004, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo