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 de boucle do..while


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut Problème de boucle do..while
    Je sors de ma boucle alors que les conditions ne sont pas remplies, quelqu'un peut m'aider : voici mon 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
    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
    64
    65
     
    int ArretProgramme()
    {
        /* Fonction renvoyant 0 ou 1
        0 traduit o et 1 traduit n
        0=On quitte le programme
        1=On reste dans le programe
        */
        int i;
        int car;   
        printf("\nConfirmez-vous vraiment l'arr%ct du programme : (O)OUI et (N)NON :",136);
        car=getche(); /*Recupération de la valeur saisie sur écran */
        if ((car=='o') || (car=='O')) /* Si on a tapé o ou O donc on quitte */
        {
            i=1;
        }
        else /*Sinon n ou autre valeur on ne quitte pas et on renvoie une erreur si ce n'etait n */
        {
            if ((car=='N') || (car=='n'))
            {
                i=0;
            }
            else
            {
                printf("Retour au menu principal, car mauvais choix.\n");
                i=0;
            }
        }
        /*printf("Nombre retourné :%d\n",i);*/
        return i; /*Renvoi de la valeur saisie */
    }
     
     
     
     
    int main(int argc, char *argv[])
    {
        int iOption;
        int iArret;
        /*Appel de l'affichage du menu principal*/
        do
        {
            iArret=1;
            AffichageMenu();
            /*iOption=ChoixOption();*/
            printf("Veuillez-S%cl%ctionner une option 1,2,3,4 : ",130,130);
            iOption=getche();
            /*printf("Valeur de l'option : %c\n",iOption);*/
            switch (iOption)
            {
                case 49:
                    printf("\nModule de saisie\n");
                    /*iOption=*/getche();
                   continue;
                case 50:printf("\nModule de tri\n");getche();break;
                case 51:printf("\nModule de suppression\n");getche();break;
                case 52 :iArret=ArretProgramme();break;
                default : iOption=getche();printf("\nValeur par defaut\n");continue; 
            }
     
        }while(iArret != 1 && iOption != 53); /* tant que iArret(flag de la fonction Arret programme ne vaut pas 1 et iOption choix menu
        différent de 4 on affiche le menu principal */  
        printf("\nValeur de iOption : %d\n",iOption);
    	return 0;
    }

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Bien le bonjour,

    - Quelle condition ?
    - Quelle est l'exécution que tu fais qui pose problème...

    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut condition
    salut,

    la voici mes conditions

    while(iArret != 1 && iOption != 53);

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Premièrement :
    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
     
    cond.c: In function 'ArretProgramme':
    cond.c:10: warning: implicit declaration of function 'printf'
    cond.c:10: warning: incompatible implicit declaration of built-in function 'printf'
    cond.c:11: warning: implicit declaration of function 'getche'
    cond.c: In function 'main':
    cond.c:43: warning: implicit declaration of function 'AffichageMenu'
    cond.c:45: warning: incompatible implicit declaration of built-in function 'printf'
    cond.c:62: warning: incompatible implicit declaration of built-in function 'printf'
    cond.c:35: warning: unused parameter 'argc'
    cond.c:35: warning: unused parameter 'argv'
    /tmp/ccCsRWfB.o: In function `ArretProgramme':cond.c:(.text+0x1b): undefined reference to `getche'
    /tmp/ccCsRWfB.o: In function `main':cond.c:(.text+0x5c): undefined reference to `AffichageMenu'
    :cond.c:(.text+0x7d): undefined reference to `getche'
    :cond.c:(.text+0x97): undefined reference to `getche'
    :cond.c:(.text+0xf2): undefined reference to `getche'
    :cond.c:(.text+0x11f): undefined reference to `getche'
    :cond.c:(.text+0x14c): undefined reference to `getche'
    Voilà ce que me rend le compilateur...

    Ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            switch (iOption)
            {
                case 49:
                    printf("\nModule de saisie\n");
                    /*iOption=*/
                   continue;
                case 50:printf("\nModule de tri\n");break;
                case 51:printf("\nModule de suppression\n");break;
                case 52 :iArret=ArretProgramme();break;
                default : iOption=getchar();printf("\nValeur par defaut\n");continue; 
            }
    Utiliser les codes ascii en numérique rend le code non portable... Il faut utiliser '1', '2', '3' ...

    Enfin, je ne sais pas ce que tu fais pour voir le problème... Donne un exemple d'exécution à problème...

    Jc

  5. #5
    Membre expérimenté

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Par défaut
    tu n'aurait pas fait une erreur ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case 52 :iArret=ArretProgramme();break;
    et plus loin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    }while(iArret != 1 && iOption != 53);
    ca vient peut etre de là

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut condition
    Oui, peut être à ce niveau, mais je viens de corriger et je continue toujoirs à sortir du boucle.
    En tapant 1(49), je devrais me retrouver toujours à l'écran avec module de saisie mais au contraire je sors.

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par chental
    Oui, peut être à ce niveau, mais je viens de corriger et je continue toujoirs à sortir du boucle.
    En tapant 1(49), je devrais me retrouver toujours à l'écran avec module de saisie mais au contraire je sors.
    Non, en tapant 1, iArret demeure à 1 donc la boucle se termine...

    Jc

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut Conditions
    Ci-joint la fonction main modifiée mais le problème persiste.
    Il faut que les deux conditions suivantes soient remplies pour sortir de la boucle :
    Pour sortir de la boucle, il faut que iArret valle 1 et iOption valle 5

    int main(int argc, char *argv[])
    {
    int iOption=1;
    int iArret=0;
    /*Appel de l'affichage du menu principal*/
    do
    {
    iArret=1;
    AffichageMenu();
    /*iOption=ChoixOption();*/
    printf("Veuillez-S%cl%ctionner une option 1,2,3,4 : ",130,130);
    iOption=getche();
    /*printf("Valeur de l'option : %c\n",iOption);*/
    switch (iOption)
    {
    case '1':
    printf("\nModule de saisie\n");
    /*iOption=*/getche();
    continue;
    case '2':printf("\nModule de tri\n");getche();break;
    case '3':printf("\nModule de suppression\n");getche();break;
    case '4':printf("\nModule de sauvegarde\n");getche();break;
    case '5' :iArret=ArretProgramme();break;
    default : iOption=getche();printf("\nValeur par defaut\n");break;
    }

    }while(iArret != 1 && iOption != '5'); /* tant que iArret(flag de la fonction Arret programme ne vaut pas 1 et iOption choix menu
    différent de 4 on affiche le menu principal */
    printf("\nValeur de iOption : %d\n",iOption);
    return 0;
    }

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

Discussions similaires

  1. Problème avec variable dans boucle DO WHILE
    Par bandit_debutant dans le forum Langage
    Réponses: 13
    Dernier message: 25/02/2008, 16h34
  2. [MySQL] Problème sur Boucle While après un LEFT JOIN
    Par matperino dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 28/05/2007, 17h43
  3. [MySQL] Problème de boucle while
    Par Justin_C dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/12/2006, 19h16
  4. Problème Boucle Do-While?!
    Par Julien_C++ dans le forum C++
    Réponses: 6
    Dernier message: 29/07/2006, 12h23
  5. [MySQL] Problème de boucle while sur base de données
    Par Darhyl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/05/2006, 15h11

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