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 :

Instructions While / switch imbriquées


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Instructions While / switch imbriquées
    Bonjour,

    Je suis nouveau dans la programmation donc nouveau sur ce forum.
    Tout d'abord je remercie les contributeurs de ce forum.
    Apres une vaine recherche dans divers ouvrage, je n'ai pas pu trouver réponse
    à mon petit problème.C'est un programme un peu bête mais qui illustre mon petit souci
    En voici le 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>
     
    main()
    {
    char c;
    while(1)
            {
               printf("Donner une valeur de c\n");
               scanf("%c",&c);
               switch (c)
                       {
                        case '1' :  printf("C'est 1\n");
                                       break;
     
                        case '2' :  printf("C'est 2\n");
                                       break;
                        }
                        printf("switch fini\n");
            }
    }
    L'exécution de ce code avec gcc 4.2.3 sous Linux me donne :

    Donner une valeur de c
    1
    C'est 1
    switch fini ---->Jusqu'ici tout va bien.
    Donner une valeur de c ---->Tout va bien.On va entrer une deuxième fois dans la boucle
    switch fini ---->Je ne comprend pas l'apparition de cette instruction.
    Donner une valeur de c

    Quelle est donc mon erreur?
    Je dois avouer que cela fait plusieurs jours que je me pose la question
    mais je ne vois pas du tout.Merci d'avance.

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par countrycrisp Voir le message
    Quelle est donc mon erreur?
    Je dois avouer que cela fait plusieurs jours que je me pose la question
    mais je ne vois pas du tout.Merci d'avance.
    Lorsque tu saisis la valeur, tu tapes deux caractères : 1 et ENTER.
    • scanf() consomme le '1'.
    • Puis tu passe dans ton switch.
    • Le programme affiche de nouveau le message d'invitation.
    • Puis scanf() est appelé et consomme le caractère \n qui reste dans le flux de la saisie précédente.


    Il faut après une saisie nettoyer le flux d'entrée des caractères parasites qui pourraient y rester.

    Je t'invite à rechercher sur le forum (c'est un problème fréquent) ou à jeter un coup d'œil sur la FAQ

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    Salut et bienvenue à toi.

    Pense à utiliser la balise "code", lorsque tu mets des lignes de code.

    Sinon pour ton problème, voici ce que j'ai corrigé.

    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
    main()
    {
    	char c;
    	do
    	{
    		printf("Donner une valeur de c\n");
    		scanf("%c",&c);
     
    		getchar();
    		switch (c)
    		{
    		case '1' : 
    			{
    				printf("C'est 1\n");
    				break;
    			}
     
    		case '2' : 
    			{
    				printf("C'est 2\n");
    				break;
    			}
     
    		default:
    			{
    				printf("switch fini\n");
    				exit(0);
    			}
    		}
     
    	}
    	while(1);
     
    	return 0;
    }
    Deux choses n'allaient pas dans ton code :
    • Ton printf("switch terminé"); était en dehors du switch case. De ce fait, lors d'un break ta fonction sautait directement dessus (alors que le switch n'était pas terminé).
      Le choix "default" est activé lorsque tu appuie sur une touche différente de celles que tu as mis en "case". Ainsi, si tu veux arrêter ton switch, appuis sur auttre chose que 1 ou 2.
    • Tu remarqueras qu'avant le switch j'ai ajouté la fonction getchar(). Cela permet d'éviter un problème de mémoire. C'est un vieux truc que j'avais après lors de ma première année d'étude (le caractère final de la valeur n'est pas pris en compte, si je me souvient).

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci à vous deux.
    Je vais déguster le FAQ, il y a plein de choses intéressantes. :o)
    Ce langage est diabolique.
    La prochaine fois, je penserai aux balises.

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

Discussions similaires

  1. [Débutant] Instruction While
    Par paintbox dans le forum C#
    Réponses: 14
    Dernier message: 20/09/2011, 10h01
  2. Erreur de logique avec do while switch
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/06/2011, 21h54
  3. instruction while et tableau de valeurs
    Par Sh4dow49 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/07/2009, 15h32
  4. Comprendre l'instruction WHILE.
    Par pcsystemd dans le forum Général Python
    Réponses: 13
    Dernier message: 01/03/2008, 02h17
  5. Réponses: 1
    Dernier message: 19/03/2007, 22h15

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