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 les Boucles


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Problème avec les Boucles
    bonjour a tous
    alors voila j'essaye de programmer depuis peu et j'ai un problème pour faire mes boucles. je tente de faire une calculatrice mais je ne trouve pas le code pour que le programme puisse reprendre depuis le début à la question "Est-ce l'opération désirée?" si oui le calcul se fait, sinon le programme reprend au début, mais je n'arrive qu'à faire le calcul Pouvez-vous m'aider svp?

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    poste nous ton code sinon ça va être dur de savoir ce qui se passe.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main()
    {
        int n1, n2;
        char choix, choix2, choix3, a = n1 + n2, z = n1 - n2, e = n1 * n2, r = n1 / n2, t = n1 % n2 ;
     
       printf ("==========Calculatrice==========\n\n\n");
       do {
        printf ("Veuillez choisir un nombre\n");// Choix n1
        scanf ("%d", &n1);
        printf ("Veuillez choisir un autre nombre\n");//choix n2
        scanf ("%d", &n2);
        printf ("Quelle opération souhaitez-vous effectuer?\n");
        while (choix != '+' || '-' || '*' || '/'){
            printf ("Tapez '+' pour l'addition\n");
            printf ("Tapez '-' pour la soustraction\n");
            printf ("Tapez '*' pour la multiplication\n");
            printf ("Tapez '/' pour la division\n");
            scanf ("%c", &choix);}
        if (choix == '+'){
            printf ("===Addition===\n");
            printf ("Voulez-vous faire une addition?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
            while (choix2 != 'o' || 'O' || 'n' || 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (choix2 == 'o' || 'O'){
                    printf ("Le résultat de %d + %d est %d\n", n1, n2, a);}
                    getchar ();
        }
        else if (choix == '-'){
            printf ("===Soustraction===\n");
            printf ("Voulez-vous faire une soustraction?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
             while (choix2 != 'o' || 'O' || 'n' || 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (choix2 == 'o' || 'O'){
                    printf ("Le résultat de %d - %d est %d\n", n1, n2, z);}
                    getchar ();
        }
        else if (choix == '*'){
            printf ("===Multiplication===\n");
            printf ("Voulez-vous faire une multiplication?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
            while (choix2 != 'o' || 'O' || 'n' || 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (choix == 'o' || 'O'){
                    printf ("Le résultat de %d * %d est %d\n", n1, n2, e);}
                    getchar ();
        }
        else if (choix == '/'){
            printf ("===Division===\n");
            printf ("Voulez-vous faire une multiplication?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
             while (choix2 != 'o' || 'O' || 'n' || 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (t == 0){
                    printf ("Le résultat de %d / %d est %d\n", n1, n2, r);}
                    else  printf ("Le résultat de %d / %d est %d et il reste %d\n",n1, n2, r, t);
                    getchar ();
        }
            printf ("Voulez-vous effectuer une autre opération?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix3);
            while (choix3 != 'o' || 'O' || 'n' || 'N'){
                printf ("Voulez-vous effectuer une autre opération?\n");
                printf ("Oui -> o\n");
                printf ("Non -> n\n");
                scanf ("%c", &choix3);}}
        while (choix == 'n' || 'N');
        void exit (int etat);
    }
    pour l'instant c'est ça mais je crois qu'il y a quelques erreurs dans celui-ci

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    déja petite erreur de contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    printf ("===Division===\n");
    printf ("Voulez-vous faire une multiplication?\n");
    Ensuite ceci n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (choix == 'n' || 'N');
    Plutot faire ça comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (choix == 'n' || choix == 'N');
    Sinon de manière générale, la structure de ton programme est bancale. Tu devrais factoriser tout ça. une fonction pour l'addition, une pour la soustraction etc... Ce sera beaucoup plus simple à manipuler. Ensuite tu fait une batterie de if, else if (comme tu a fait) qui appelleront tes fonctions, le tout dans une boucle.

    et a la fin du main fait un return (0); plutot q'un exit.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut à toi,
    Tu fais tout le temps la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix2 != 'o' || 'O' || 'n' || 'N'
    Ceci est faux et archi faux ! Ca compile en effet mais ça ne fait pas du tout ce que tu souhaite faire.
    Ce que tu voudrais c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix2 != 'o' || choix2 != 'O' || choix2 != 'n' || choix2 != 'N'
    Modifie tous les trucs comme ça et ça devrait déjà aller mieux

    La signification de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix2 != 'o' || 'O' || 'n' || 'N'
    C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((((choix2 != 'o') || ('O')) || ('n')) || ('N'))
    'a' renvois la valeur ASCII du caractère 'a' donc une valeur positive donc vrai, donc tes conditions seront toujours vraies

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci pour ces réponses j'ai remédié aux problèmes que vous avez soulevé mais ma question à la base n'était pas là. en fait je voudrais qu'à ce niveau du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (choix2 == 'o' || choix2 == 'O'){
                    printf ("Le résultat de %d + %d est %d\n", n1, n2, a);}
                    getchar ();
    quand l'opérateur dit non que le else qui est censé suivre renvoi au début du programme
    De plus lorsque j'essaye mon programme,il se bloque à la premeire boucle avec le while qui permet de choisir une opération je voudrais savoir pourquoi puisque je peux choisir mes chiffres mais l'oprétion et ensuite impossible à faire et c'est plutôt bête pour une calculatrice

  7. #7
    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
    Essaye de restructurer ton code premièrement. Il y a un gros soucis à ce niveau là.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Voici le nouveau code mais comme je l'ai dit précédemment, je n'arrive pas à comprendre comment faire pour que le programme soit fonctionnel ;?
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main()
    {
        int n1, n2;
        char choix, choix2, choix3;
        char a = n1 + n2;
        char z = n1 - n2;
        char e = n1 * n2;
        char r = n1 / n2;
        char t = n1 % n2 ;
     
       printf ("==========Calculatrice==========\n\n\n");
       do {
        printf ("Veuillez choisir un nombre\n");// Choix n1
        scanf ("%d", &n1);
        printf ("Veuillez choisir un autre nombre\n");//choix n2
        scanf ("%d", &n2);
        printf ("Quelle opération souhaitez-vous effectuer?\n");//choix opération
         while (choix != '+' || choix != '-' || choix != '*' || choix != '/'){
            printf ("Tapez '+' pour l'addition\n");
            printf ("Tapez '-' pour la soustraction\n");
            printf ("Tapez '*' pour la multiplication\n");
            printf ("Tapez '/' pour la division\n");
            scanf ("%c", &choix);}
        if (choix == '+'){//addition
            printf ("===Addition===\n");
            printf ("Voulez-vous faire une addition?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
            while (choix2 != 'o' || choix2 != 'O' || choix2 != 'n' || choix2 != 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (choix2 == 'o' || choix2 == 'O'){
                    printf ("Le résultat de %d + %d est %d\n", n1, n2, a);}
                    else //quel code pour que le programme recommence à partir de 'do'?
                    getchar ();
        }
        else if (choix == '-'){//soustraction
            printf ("===Soustraction===\n");
            printf ("Voulez-vous faire une soustraction?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
             while (choix2 != 'o' || choix2 != 'O' || choix2 != 'n' || choix2 != 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (choix2 == 'o' || choix2 == 'O'){
                    printf ("Le résultat de %d - %d est %d\n", n1, n2, z);}
                    getchar ();
        }
        else if (choix == '*'){//multiplication
            printf ("===Multiplication===\n");
            printf ("Voulez-vous faire une multiplication?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
            while (choix2 != 'o' || choix2 != 'O' || choix2 != 'n' || choix2 != 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (choix2 == 'o' || choix2 =='O'){
                    printf ("Le résultat de %d * %d est %d\n", n1, n2, e);}
                    getchar ();
        }
        else if (choix == '/'){//division
            printf ("===Division===\n");
            printf ("Voulez-vous faire une division?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix2);
             while (choix2 != 'o' || choix2 != 'O' || choix2 != 'n' || choix2 != 'N'){
                printf ("Mettre 'o' pour continuer ou 'n' pour une autre opération\n");
                scanf ("%c", &choix2);}
                if (t == 0){//sans reste
                    printf ("Le résultat de %d / %d est %d\n", n1, n2, r);}
                    else  printf ("Le résultat de %d / %d est %d et il reste %d\n",n1, n2, r, t);//avec reste
                    getchar ();
        }
            printf ("Voulez-vous effectuer une autre opération?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix3);
            while (choix3 != 'o' || choix3 != 'O' || choix3 != 'n' || choix3 != 'N'){
                printf ("Voulez-vous effectuer une autre opération?\n");
                printf ("Oui -> o\n");
                printf ("Non -> n\n");
                scanf ("%c", &choix3);}}
        while (choix3 == 'n' || choix2 == 'N');
        return (0);
    }
    comme vous le verrez certainement, j'ai marqué la ligne où j'ai mon problème d'un commentaire

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aerysse Voir le message
    Voici le nouveau code mais comme je l'ai dit précédemment, je n'arrive pas à comprendre comment faire pour que le programme soit fonctionnel ;?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         while (choix != '+' || choix != '-' || choix != '*' || choix != '/')
    Pffff fais un effort de logique quoi !!! Ou alors relis les règles mathématiques de "De Morgan" !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci Sve@r pour ta remarque sa ma permis de voir où était l'erreur dans mes boucles avec while (même si je comprends rien aux règles de De Morgan ) J'ai pu rectifier ça, mais pouvez-vous m'indiquer, ou tout du moins m'expliquer comment faire pour que quand j'arrive ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    do {
            printf ("Voulez-vous faire une addition?\n");
            printf ("Oui -> o");
            printf ("Non -> n");
            scanf ("%c", &choix);
            }
            while ( choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N');
            if (choix == 'o' || choix == 'O')
            {
                printf ("Le résultat de %d + %d est %d\n", n1, n2, a);
            }
            else
    le programme reparte au début au niveau du else?

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aerysse Voir le message
    Merci Sve@r pour ta remarque sa ma permis de voir où était l'erreur dans mes boucles avec while (même si je comprends rien aux règles de De Morgan )
    De Morgan a clarifié les règles d'inversion booléennes par des équations mathématiques disant
    non (a et b) = non(a) ou non(b)
    non (a ou b) = non(a) et non(b)

    C'est d'ailleurs logique. Exemple: si tu veux un nombre entre 5 et 10, tu demanderas "n > 5 et n < 10". Si tu ne veux pas ce nombre, tu demanderas "n < 5 ou n > 10"

    Sinon la démonstration se fait avec les tables de vérité
    Démo 1
    A: 0 0 1 1
    B: 0 1 0 1
    Non(A): 1 1 0 0
    Non(B): 1 0 1 0
    A OU B : 0 1 1 1
    Non (A OU B): 1 0 0 0 qui se trouve être aussi non(A) ET non(B)

    Démo 2
    A: 0 0 1 1
    B: 0 1 0 1
    Non(A): 1 1 0 0
    Non(B): 1 0 1 0
    A ET B : 0 0 0 1
    Non (A ET B): 1 1 1 0 qui se trouve être aussi non(A) OU non(B)

    Citation Envoyé par Aerysse Voir le message
    J'ai pu rectifier ça, mais pouvez-vous m'indiquer, ou tout du moins m'expliquer comment faire pour que quand j'arrive ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    do {
            printf ("Voulez-vous faire une addition?\n");
            printf ("Oui -> o");
            printf ("Non -> n");
            scanf ("%c", &choix);
            }
            while ( choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N');
            if (choix == 'o' || choix == 'O')
            {
                printf ("Le résultat de %d + %d est %d\n", n1, n2, a);
            }
            else
    le programme reparte au début au niveau du else?
    C'est voulu le fait de demander 15 fois la même chose ? Le type tape "+" et tu lui reposes "voulez-vous faire une addition". Tu veux pas rajouter aussi "c'est votre dernier mot Jean-Pierre" ???

    Bon, je présume que t'as pas trop le droit d'utiliser switch()...

    Code c : 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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main()
    {
    	int n1, n2;
    	char choix=0;
     
    	printf ("==========Calculatrice==========\n\n\n");
    	while (1) {
    		printf ("Veuillez choisir un nombre\n");// Choix n1
    		scanf ("%d", &n1); getchar();
    		printf ("Veuillez choisir un autre nombre\n");//choix n2
    		scanf ("%d", &n2); getchar();
    		printf ("Quelle opération souhaitez-vous effectuer?\n");//choix opération
    		while (1) {
    			printf ("Tapez '+' pour l'addition\n");
    			printf ("Tapez '-' pour la soustraction\n");
    			printf ("Tapez '*' pour la multiplication\n");
    			printf ("Tapez '/' pour la division\n");
    			printf ("Tapez 'q' pour annuler\n");
    			scanf ("%c", &choix); getchar();
     
    			// Addition
    			if (choix == '+') {
    				while (1) {
    					printf ("===Addition===\n");
    					printf ("Voulez-vous faire une addition?\n");
    					printf ("Oui -> o\n");
    					printf ("Non -> n\n");
    					scanf ("%c", &choix); getchar();
    					if (choix == 'o' || choix == 'O')
    						 printf ("Le résultat de %d + %d est %d\n", n1, n2, n1+n2);
    					if (choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N')
    						 break;
    					printf("Répondez par O ou N !!!\n");
    				}
    				continue;
    			}
     
    			// Soustraction
    			if (choix == '-') {
    				while (1) {
    					printf ("===Soustraction===\n");
    					printf ("Voulez-vous faire une soustraction?\n");
    					printf ("Oui -> o\n");
    					printf ("Non -> n\n");
    					scanf ("%c", &choix); getchar();
    					if (choix == 'o' || choix == 'O')
    						 printf ("Le résultat de %d - %d est %d\n", n1, n2, n1-n2);
    					if (choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N')
    						 break;
    					printf("Répondez par O ou N !!!\n");
    				}
    				continue;
    			}
     
    			// Multiplication
    			if (choix == '*') {
    				while (1) {
    					printf ("===Multiplication===\n");
    					printf ("Voulez-vous faire une multiplication?\n");
    					printf ("Oui -> o\n");
    					printf ("Non -> n\n");
    					scanf ("%c", &choix); getchar();
    					if (choix == 'o' || choix == 'O')
    						 printf ("Le résultat de %d * %d est %d\n", n1, n2, n1*n2);
    					if (choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N')
    						 break;
    					printf("Répondez par O ou N !!!\n");
    				}
    				continue;
    			}
     
    			// Division
    			if (choix == '/') {
    				while (1) {
    					printf ("===Division===\n");
    					printf ("Voulez-vous faire une division?\n");
    					printf ("Oui -> o\n");
    					printf ("Non -> n\n");
    					scanf ("%c", &choix); getchar();
    					if (choix == 'o' || choix == 'O')
    					{
    						if (n2 != 0)
    						 	printf ("Le résultat de %d / %d est %f\n", n1, n2, (double)n1/n2);
    						else
    						 	printf ("Le résultat de %d / %d ne peut pas être calculé (division par 0) !!!\n", n1, n2);
    					}
    					if (choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N')
    						 break;
    					printf("Répondez par O ou N !!!\n");
    				}
    				continue;
    			}
     
    			// Quitter calcul en cours
    			if (choix == 'q') break;
     
    			// Choix erroné
    			printf("Veuillez taper +, -, *, / ou q !!!\n");
    		}
     
    		printf("Voulez-vous recommencer avec d'autres nombres ?\n");
    		scanf ("%c", &choix); getchar();
    		if (choix != 'o' && choix != 'O') break;
    	}
    }

    Quand tu auras appris les fonctions, on pourra faire beaucoup plus propre que ce super pâté (qui fonctionne mais qui reste quand-même un gros pâté)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Alors pour que mon programme reparte j'ai pensé à mettre un goto, mais il subsiste un problème quand je lance l'application dans codeblocks: les boucles où il y a des while sont sautées, elles ne se font pas comme je le voudrais. 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
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    int main()
    {
        char choix_op, choix_recommencer, choix;
        int n1, n2;
        char a = n1 + n2;
        char z = n1 - n2;
        char e = n1 * n2;
        char r = n1 / n2;
        char t = n1 % n2;
     
        printf ("==========Calculatrice==========\n");
        program : {
        do {
        printf ("Choisissez un nombre\n");
        scanf ("%d", &n1);
        printf ("Choisissez un autre nombre\n");
        scanf ("%d", &n2);
        do {
        printf ("Choisissez une opération\n");
        printf ("Pour l'addition tapez '+'\n");
        printf ("Pour la soustraction tapez '-'\n");
        printf ("Pour la multiplication tapez '*'\n");
        printf ("Pour la multiplication tapez '/'\n");
        scanf ("%c", &choix_op);
        }
        while (choix_op == '+' || choix_op == '-' || choix_op == '*' || choix_op == '/');
        if (choix_op == '+')
        {
            do {
            printf ("Voulez-vous faire une addition?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix);
            }
            while ( choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N');
            if (choix == 'o' || choix == 'O')
            {
                printf ("Le résultat de %d + %d est %d\n", n1, n2, a);
            }
            else goto program;
        }
        else if (choix_op == '-')
        {
        do {
            printf ("Voulez-vous faire une soustraction?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix);
        }
        while (choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N');
        if (choix == 'o' || choix == 'O' )
        {
            printf ("Le résultat de %d - %d est %d\n", n1, n2, z);
        }
        else goto program ;
        }
        else if (choix_op == '*')
        {
            do {
            printf ("Voulez-vous faire une multiplication?\n");
            printf ("Oui -> o\n");
            printf ("Non ->n\n");
            scanf ("%c", &choix);
            }
            while (choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N' );
            if (choix == 'o' || choix == 'O')
            {
                printf ("Le résultat de %d * %d est %d", n1, n2, e);
            }
            else goto program ;
        }
        else if (choix_op == '/')
        {
            do {
            printf ("Voulez-vous faire une division?\n");
            printf ("Oui -> o\n");
            printf ("Non -> n\n");
            scanf ("%c", &choix);
            }
            while (choix == 'o' || choix == 'O' || choix == 'n' || choix == 'N');
            if (choix == 'o' || choix == 'O')
            {
                if (t == 0)
                printf ("Le résultat de %d / %d est %d", n1, n2, r);
                else printf ("Le résultat de %d / %d est %d et il reste %d",n1, n2, r, t);
            }
            else goto program ;
        }
        do {
        printf ("Voulez-vous effectuer une autre opération?\n");
        printf ("Oui -> o\n");
        printf ("Non -> n\n");
        scanf ("%c",&choix_recommencer);
        }
        while (choix_recommencer == 'o' || choix_recommencer == 'O' || choix_recommencer == 'n' || choix_recommencer == 'N');
        }
        while (choix_recommencer == 'o' || choix_recommencer == 'O');
        printf ("Appuyez sur entrée\n");
        getchar ();
        return 0;
    }
    }
    Vous pouvez me dire pourquoi svp?

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aerysse Voir le message
    mais il subsiste un problème quand je lance l'application dans codeblocks: les boucles où il y a des while sont sautées, elles ne se font pas comme je le voudrais....Vous pouvez me dire pourquoi svp?
    Parce que scanf()
    Plus de détails voir ici =>http://www.developpez.net/forums/d11...ture-caractere

    Tu remarqueras d'ailleurs qu'à chacun de mes scanf() de mon exemple, j'ai rajouté un getchar()...

    Citation Envoyé par Aerysse Voir le message
    Alors pour que mon programme reparte j'ai pensé à mettre un goto
    Oui ben tu oublies. Je ne dis pas que le goto est à proscrire dans tous les cas mais tu as d'abord d'autres outils à envisager avant d'essayer cette horreur...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci pour l'info du getchar j'aurais jamais trouvé tout seul.
    Pourquoi dans ce cas tu me proposes de trouver d'autres outils que goto? et lesquels?
    Et j'ai toujours un problème avec mes boucles while: la première se répète indéfiniment, même si j'utilise les caractères '+', '-', '*' ou '/'.Il faut que je mette un break pour en sortir?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ca doit être un troll xD Enfin bon je vais quand même répondre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (choix_op == '+' || choix_op == '-' || choix_op == '*' || choix_op == '/');
    Là t'es en train de dire, tant que le mec répond un choix possible alors je continu... Le seul moyen de sortir de ta boucle c'est de taper un truc bidon genre 'a'.
    Bref oui t'as de gros problèmes de logique.

    Ce que tu veux dire c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Faire {... // tout tes trucs
    } Tant que (choix_op != '+' && choix_op != '-' && ...)
    C'est le même soucis sur le while d'après.

    Quant au goto, ce n'est à utiliser que quand on sait réellement ce qu'on fait, ce qui semble loin d'être ton cas.

  16. #16
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Mei,
    Citation Envoyé par nico le terrible Voir le message
    Quant au goto, ce n'est à utiliser que quand on sait réellement ce qu'on fait, ce qui semble loin d'être ton cas.
    Et encore ...
    Si les cons volaient, il ferait nuit à midi.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci c'est vrai que maintenant ça fonctionne mieux
    Pour faire revenir le programme j'avais écrit le code dés le début, mais je ne m'en était pas rendu compte
    En fait c'est juste une boucle do{} while où le do et le code du programme et le while c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (choix_recommencer != 'n' && choix_recommencer != 'N');
    c'est tout simple
    Merci a vous tous pour votre aide

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

Discussions similaires

  1. Problème avec les boucles for
    Par Marie_7 dans le forum MATLAB
    Réponses: 4
    Dernier message: 06/09/2012, 10h56
  2. Problème avec les boucles VBA
    Par luge29 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/06/2010, 15h32
  3. problème avec les boucles vba
    Par Mon_ami dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/04/2009, 06h15
  4. problème avec les boucle infinies
    Par manciaux dans le forum C
    Réponses: 3
    Dernier message: 14/05/2007, 12h16
  5. [Tableaux] Problème avec les boucles
    Par speed_man002 dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 15h42

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