Bonjour a tous.
Je suis nouveau dans la programmation. Je commence a étudier de C (vaste programme), c'est pas le plus simple vous me direz mais étant déjà un peu geek (tweak php pour developpement sous wordpress, connaissance avancée du fonctionnement d'un ordinateur) je me suis dit que je pouvais le faire.
Je suis un tutorial pour apprendre les bases et je me suis exercé à créer une calculatrice en mode console permettant de faire les 4 opérations de base (+,-,*,/)
Tout fonctionne comme je l'avais prévu sauf une variable qui conditionne la fin du programme à la fin de boucle. Je m'explique
Fonctionnement du progz:
Le programme s'ouvre sur un menu lui donnant le choix entre les opérations à effectuer codé grace à un "switch". Ce menu à 4 choix est lui-même régie par la boucle "do...while" (ya plus simple me direz vous mais avec un "while" simple, ça merde) Bref. Si l'user entre un nombre supérieur à 4 la boucle lui ramène au départ pour choisir un nombre valide (de 1 à 4). Le "default" du switch incrémente la variable "erreur" (++) qui se retrouve à l'intérieur du "while"
Une fois qu'il a choisi son opération, le programme lui demande le nombre 1 et le nombre 2 puis process l'opération.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 .... default; printf("Veuillez faire un choix entre les 4 operations possibles"); erreur++; break; } }while(erreur++ || repeat>1);
A la fin de cette opération le programme demande si il veut recommencer une autre opération. (boucle). L'user tape "1" pour oui ou "0" pour non.
A la fin du premier calcul si l'user tape 0 le programme s'arrete.
A la fin du premier calcul si l'user tape 1 la boucle le ramène au point de départ sur le menu de choix des opérations
Le problème
La variable "repeat" (invoquée au début de main par repeat=0) ne reconnait pas le 0 si l'utilisateur à déjà répété l'opération.
A la fin du deuxièmme calcul si l'user tape 1 la boucle le ramène au point de départ et si l'user tape 0, la boucle le ramène quand même au point de départ.
Il semblerait donc que la variable repeat garde en mémoire la valeur qui lui à été attribuée à la fin du premier tour de boucle. L'utilisateur aura beau entrer "0" apres les calculs suivant, le programme le ramène toujours au point de départ sans jamais s'arreter.
Pouriez vous m'aider à faire en sorte que la variable "repeat" est une valeur de 0 à chaque tours de boucle et faire en sorte que l'user puisse sortir du programme en tapant 0 même apres plusieurs tours dans la boucle ?
Je vous laisse la source afin que vous puissiez avoir une vue d'ensemble
Merci d'avance pour votre aide. Cela me permettra d'avancer dans ma compréhension de ce langage.
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 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char *argv[]) { int operation = 0, resultat = 0, nombre1 = 0, nombre2 = 0; /*definition des variable utilisée dans le programme */ int erreur=0; int repeat=0; /* la fameuse variable que j'aimerais reset*/ do { printf("==== Menu des operations ====\n\n"); printf("1. addition\n"); printf("2. soustration\n"); printf("3. Division\n"); printf("4. multiplication\n\n"); printf("Votre choix ?\n"); scanf("%d", &operation); switch (operation) { case 1:// addition printf("\nvous avez demande une addition\n"); printf("nombre1 : \n"); scanf("%d", &nombre1); printf("nombre2: \n"); scanf("%d", &nombre2); resultat = nombre1 + nombre2; printf("%d + %d = %d\n" , nombre1, nombre2, resultat); printf("Voulez vous faire un autre calcul ?\n appuyez sur 1 pour oui et 0 pour non \n"); scanf("%d", &repeat); break; case 2://soustration printf("\nvous avez demande une soustration\n"); printf("nombre1 : \n"); scanf("%d", &nombre1); printf("nombre2: \n"); scanf("%d", &nombre2); resultat = nombre1 - nombre2; printf("%d - %d = %d\n" , nombre1, nombre2, resultat); printf("Voulez vous faire un autre calcul ?\n appuyez sur 1 pour oui et 0 pour non \n"); scanf("%d", &repeat); break; case 3: //division printf("\nvous avez demande une division\n"); printf("nombre1 : \n"); scanf("%d", &nombre1); printf("nombre2: \n"); scanf("%d", &nombre2); resultat = nombre1 / nombre2; printf("%d / %d = %d\n" , nombre1, nombre2, resultat); printf("Voulez vous faire un autre calcul ?\n appuyez sur 1 pour oui et 0 pour non \n"); scanf("%d", &repeat); break; case 4: //multiplication printf("\nvous avez demande une multiplication\n"); printf("nombre1 : \n"); scanf("%d", &nombre1); printf("nombre2: \n"); scanf("%d", &nombre2); resultat = nombre1 * nombre2; printf("%d * %d = %d\n" , nombre1, nombre2, resultat); printf("Voulez vous faire un autre calcul ?\n appuyez sur 1 pour oui et 0 pour non \n"); scanf("%d", &repeat); break; default: printf("Veuillez faire un choix parmis les 4 opération basiques\n"); erreur++; break; } }while(erreur++ || repeat>1); return 0; }
Crdlt.
unsteady
Partager