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émes de Boucles imbriquées


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Process enginer
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Process enginer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Problémes de Boucles imbriquées
    Bonjour,

    je veux réaliser un programme qui utilise deux 'switch'
    mais ça marche pas :

    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
    #include <stdio.h>
     
    char choix1,choix2;
     
    main()
    {
     
    printf("ENTER UR CHOICE :\n");
    choix1 = getchar();
     
    switch (choix1)
     
    {
     
    case'y':
    printf("ENTER THE FILE :\n");
    choix2=getchar();
     
    switch (choix2)
    {
        case'1':
        printf("'.bas' file");
        break;
     
        case'2':
        printf("'.900' file");
        break;
     
        default :
    	printf("WRONG CHOICE");
     
     
    };
     
    break;
     
    case'n':
    printf("2");
    break;
     
        default :
    	printf("WRONG CHOICE");
     
    };
    }
    merci pour votre aide

  2. #2
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    ça marche pas
    c'est-à-dire ? quelle est l'erreur ?

    En attendant d'avoir plus de précisions je te conseillerai quand même d'encapsuler (entre { }) toute la section contenant le 2ème switch (= la section du cas 'y').

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Process enginer
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Process enginer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    " ça marche pas" c'est à dire lorsque je choisis 'y' le compilateur affiche "ENTER THE FILE" et s’arrête, il ne continue pas vers la deuxième switch.
    j'ai déjà essayé ta proposition ça marche pas
    Merci

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Quand tu appuies sur ENTER, un '\n' est ajouté dans ton buffer clavier...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Process enginer
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Process enginer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Quand tu appuies sur ENTER, un '\n' est ajouté dans ton buffer clavier...
    alors comment résoudre à ceci stp??

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Citation Envoyé par claude_tech Voir le message
    alors comment résoudre à ceci stp??
    En cherchant un peu dans la FAQ par exemple : http://c.developpez.com/faq/?page=cl...buffer_clavier

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Process enginer
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Process enginer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par jeroman Voir le message
    En cherchant un peu dans la FAQ par exemple : http://c.developpez.com/faq/?page=cl...buffer_clavier
    en lisant l'exemple sur la FAQ, je n'ai pas arrivé à l'appliquer sur mon exemple.
    cependant lorsque je tape sur clavier 'y' suivie par un 'ctrl+z' ça marche !!!!!!
    est ce que je peux traduire ceci par code ??? comment ??

    Merci

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 401
    Points : 23 783
    Points
    23 783
    Par défaut
    Ctrl-Z (ou Ctrl-D sous UNIX) va envoyer sur le champ le contenu du buffer de ligne à ton application, sans attendre le retour à la ligne. Tu peux déjà essayer

    y <Ctrl-Z> 1 <Ctrl-Z>

    … pour faire fonctionner le code existant.

    Sinon, il faut faire un peu de conception en amont : Si, ce que tu veux faire, c'est faire « y + Entrée » puis « 1 + Entrée », par exemple (en remplaçant y par n et 1 par 2 au besoin), alors ce que tu veux faire, c'est saisir successivement deux lignes, et c'est précisément cela qu'il faut coder.

    Tu peux le faire avec scanf() par exemple, mais le plus simple pour commencer est fgets(). Cette fonction attend un flux (stdin), un pointeur vers un buffer pour y déposer la chaîne lue, et la taille de ce buffer pour être sûre de ne pas faire de débordement.

    Tu peux passer l'adresse de ton caractère avec « &choix1 » comme pointeur de buffer et déclarer que ce buffer a une taille de « 1 ». Ainsi, c'est fgets() qui s'occupe de gérer le retour à la ligne et en lisant le caractère choix1 comme tu le fais actuellement, tu examines en fait le premier caractère de la chaîne. Tu fais ensuite de même avec choix2.

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 123
    Points : 130
    Points
    130
    Par défaut problème de buffer
    Bonjour,
    1) il vous affiche bien un ENTER THE FILE ? Mais, le caractère suivant est le retour chariot de votre première entrée. Il faut que vous fassiez attention que getchar() "pop" le premier caractère trouvé dans stdin. Si vous tapez 'y1' ou 'y2' suivie de entrée, cela devrait fonctionner. Donc, faites un getchar() supplémentaire pour enlever le retour chariot.
    2) le WRONG CHOICE n'a pas de retour chariot. Dans stdout, s'il l'on veut faire afficher la chaîne, il faut qu'il y ait un retour chariot à la fin sinon la chaîne reste dans le buffer.

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 401
    Points : 23 783
    Points
    23 783
    Par défaut
    Citation Envoyé par olivieram Voir le message
    Bonjour,
    1) il vous affiche bien un ENTER THE FILE ? Mais, le caractère suivant est le retour chariot de votre première entrée. Il faut que vous fassiez attention que getchar() "pop" le premier caractère trouvé dans stdin. Si vous tapez 'y1' ou 'y2' suivie de entrée, cela devrait fonctionner. Donc, faites un getchar() supplémentaire pour enlever le retour chariot.
    Je me doute que ton envie d'aider est bien réelle, mais il faut absolument que tu prennes l'habitude de relire le fil en entier au moins une fois avant d'intervenir !

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Process enginer
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Process enginer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour vos réponse.

    Voila comment j'ai postulé :
    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
     
    #include <stdio.h>
    #include <string.h>
     
    char choix1,choix2,a;
     
    main()
    {
     
    printf("ENTER UR CHOICE :\n");
    scanf("%c",&choix1);
    fflush(stdin);
    if(choix1=='y')
    {
    printf("ENTER THE FILE :\n");
     
    scanf("%c",&a);
     
     
        if(a=='1')
        {
        printf("'.bas' file");
        }
    if(a=='2')
        {
        printf("'.900' file");
        }
     
    }
     
    if(choix1=='n')
    {
        printf("2");
    }
     
     
    }
     
    je sais que c'est une solution minable, mais pour moi le problème est résolu !!
     
    Merci

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    fflush(stdin);
    Il ne faut jamais "fflusher" stdin. Ce n'est pas portable.

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

Discussions similaires

  1. Problème de boucles imbriquées
    Par cedric70 dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/08/2014, 15h36
  2. Problème de boucle imbriquée
    Par Phossoyeur dans le forum C#
    Réponses: 0
    Dernier message: 19/06/2012, 14h09
  3. [OCaml] Problème de boucles imbriquées
    Par Capitain_jupi dans le forum Caml
    Réponses: 0
    Dernier message: 01/10/2011, 13h42
  4. [XSLT] problème de boucle imbriquée en xsl/xpath
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2009, 18h30
  5. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26

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