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 :

Problème avec un switch !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Par défaut Problème avec un switch !
    Voici le bout de code qui pose problème :


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    		codeLu = getchar();
    		while(codeLu != '0')
    		{
    			switch(codeLu)
    			{
    			case '1':
    				{
    					printf("\nRentrez le nouveau prenom : ");
    					fflush(stdin);
    					gets(prenomLu);
    					for(k=0; k<j; k=k+1)
    					{
    						if((strcmp(Tab[i].nom, Tab[k].nom) == 0))
    						{
    							if((strcmp(Tab[k].prenom, prenomLu) == 0))
    								break;
    						}
    					}
     
    					if(k<j)
    						printf("\nModification rejetee : la personne existe deja.\n");
    					else
    						strcpy(Tab[i].prenom, prenomLu);
    					printf("\nSi vous souhaitez effectuer une autre modification, rentrez 1, 2 ou 3, sinon rentrez 0 pour quitter.\n");
    					codeLu = getchar();
    					if(codeLu == '0')
    						printf("\nAffichage des nouvelles informations concernant la personne :\n\n\t%-25s %-25s %-15s %-10s\n\n", Tab[i].nom, Tab[i].prenom, Tab[i].tel, Tab[i].codeCat);
    					break;
    				}
    			case '2':
    				{
    					printf("\nRentrez le nouveau telephone : ");
    					fflush(stdin);
    					gets(telLu);
    					strcpy(Tab[i].tel, telLu);
    					printf("\nSi vous souhaitez effectuer une autre modification, rentrez 1, 2 ou 3, sinon rentrez 0 pour quitter.\n");
    					codeLu = getchar();
    					if(codeLu == '0')
    						printf("\nAffichage des nouvelles informations concernant la personne :\n\n\t%-25s %-25s %-15s %-10s\n\n", Tab[i].nom, Tab[i].prenom, Tab[i].tel, Tab[i].codeCat);
    					break;
    				}
    			case '3':
    				{
    					printf("\nRentrez la nouvelle categorie : ");
    					fflush(stdin);
    					gets(codeCatLu);
    					strcpy(Tab[i].codeCat, codeCatLu);
    					printf("\nSi vous souhaitez effectuer une autre modification, rentrez 1, 2 ou 3, sinon rentrez 0 pour quitter.\n\n");
    					codeLu = getchar();
    					if(codeLu == '0')
    						printf("\nAffichage des nouvelles informations concernant la personne :\n\n\t%-25s %-25s %-15s %-10s\n\n", Tab[i].nom, Tab[i].prenom, Tab[i].tel, Tab[i].codeCat);
    					break;
    				}
    			default:
    				{
    					printf("\nCode errone. Veuillez saisir a nouveau le code SVP.\n\n");
    					codeLu = getchar();
    					if(codeLu == '0')
    						printf("\nAffichage des nouvelles informations concernant la personne :\n\n\t%-25s %-25s %-15s %-10s\n\n", Tab[i].nom, Tab[i].prenom, Tab[i].tel, Tab[i].codeCat);
    					break;
    				}
    			}
    }
    Et voici ce qui s'affiche si l'on rentre un code ki rentre dans le default (ici le code rentré est 9) :

    9

    Code errone. Veuillez saisir a nouveau le code SVP.


    Code errone. Veuillez saisir a nouveau le code SVP.

    Je ne vois pas pourquoi le message apparait 2 fois...

  2. #2
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Salut,

    getchar() lit le premier caractère sur stdin, mais ne supprime pas les caractères restants. Ainsi, au second appel de getchar(), c'est '\n' qui est lu avant que l'utilisateur puisse faire quoi que ce soit. Je recommande donc de penser à vider stdin après appel de getchar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    int lire_car (void)
    {
       int c = getchar();
       if(c != '\n' && c != EOF)
       {
           int c;
           while((c = getchar() != '\n') && c != EOF)
           {
           }
       }
       return c;
    }

  3. #3
    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 Dark_Alex69 Voir le message
    Voici le bout de code qui pose problème :
    <...>
    Et voici ce qui s'affiche si l'on rentre un code ki rentre dans le default (ici le code rentré est 9) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    9
     
    Code errone. Veuillez saisir a nouveau le code SVP.
     
     
    Code errone. Veuillez saisir a nouveau le code SVP.
    Je ne vois pas pourquoi le message apparait 2 fois...
    Problème récurrent. Je te conseille de revoir complètement tes saisies.

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    je ne veux plus jamais voir de gets()...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Par défaut
    Pour le moment on n'a appris que gets() pour recuperer des string.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Par défaut
    Pour le message de odsen.s, je n'ai pa trop compris ton code...

  6. #6
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Citation Envoyé par Dark_Alex69 Voir le message
    Pour le moment on n'a appris que gets() pour recuperer des string.
    Berk...
    Où ça ?

    Citation Envoyé par Dark_Alex69 Voir le message
    Pour le message de odsen.s, je n'ai pa trop compris ton code...
    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
    #include <stdio.h>
     
    /* fonction retournant le premier caractere lu
    sur stdin, supprime tous les autres caracteres */
    int lire_car (void)
    {
       /* lecture du premier caractere */
       int c = getchar();
     
       /* si il y a d'autres caracteres dans le flux*/
       if(c != '\n' && c != EOF)
       {
           int c;
           /* on appelle getchar tant qu'il reste des caracteres a lire */
           while((c = getchar() != '\n') && c != EOF)
           {
           }
       }
       return c;
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 25
    Par défaut
    Merci je vais essayer ta solution.

Discussions similaires

  1. problème avec le switch
    Par kayenne77 dans le forum Débuter
    Réponses: 15
    Dernier message: 23/11/2008, 20h52
  2. Problème avec un switch
    Par sibile dans le forum Langage
    Réponses: 2
    Dernier message: 07/08/2008, 18h09
  3. petit problème avec mon switch
    Par beegees dans le forum C++
    Réponses: 2
    Dernier message: 03/05/2008, 19h52
  4. problème avec un switch
    Par Tobleron dans le forum Langage
    Réponses: 3
    Dernier message: 19/02/2007, 22h50
  5. Problème avec un switch contenant des strings
    Par dessinateurttuyen dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2006, 12h56

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