Elle est fine elle est fine ^^
D'ailleurs est-ce en jouant du tuba qu'on devient fanfaron ?
Version imprimable
Elle est fine elle est fine ^^
D'ailleurs est-ce en jouant du tuba qu'on devient fanfaron ?
mater et dites moi ,,,
salut,
heu ca m'a l'air pas mal mais deux choses me chiffonent :
1- tu as oublié d'ouvrir l'acolade de ton deuxieme if ton imbrication ne fonctionnera donc pas correctement.
2- 'mois' n'est jamais initialisé.
voila mais sinon la structure ne me choque pas particulierement...
a +
EDIT ==> sorry j'ai mal lu tu n'a pas besoin d'acolade vu que tu n'execute qu'une instruction dans ton if :aie:
Si, il y a plus d'une chose qui choc ...
Bon passons sur Asi qui s'écrit avec un E
Sinon tu ne demandes l'age que dans le cas ou ton utilisateur va en Asie donc dans les autres cas ta variable "age" ne sera pas initialisée ...
//if(strcmp(pays,"asie"){ printf("%s",&pays); n'a pas de sens :koi:
Le "mois" n'est initialisé nul part ?
A quoi sert-il ?
Il te manque des accolades un peu partout qui, même si elles ne sont pas obligatoires pour une instruction seule, rendent toujours le code plus clair !
Et penses aux balises CODE (c'est le # dans ton editeur de messages)
Voici quelques corrections et mes commentaires:
ThierryCode:
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
110
111
112
113
114
115 #include <stdio.h> /* -tc- pas standard et inutile #include <conio.h> */ /* -tc- permet de faire le menage de maniere portable sur le flux d'entree standard */ void purger(void) { int c; while ((c = fgetc(stdin)) != '\n' && c != EOF) { } } /* -tc- main() retourne un entier de type int, toujours */ int main(void) { int choix; int age; int status; /* non utilisee int mois; */ int rv; /* -tc- on peut securiser la saisie de cette maniere */ do { printf("choisir le pays de destination du client:\n"); printf("1-[asie]\n2-[afrique]\n3-[amerique du sud]\n"); rv = scanf("%d", &choix); purger(); } while (rv != 1 || choix < 1 || choix > 3); switch (choix) { case 1: printf("Asie\n"); break; case 2: printf("Afrique\n"); break; case 3: printf("Amerique du sud\n"); break; } /* if(strcmp(pays,"asie"){ printf("%s",&pays); */ if (choix == 1) { /* -tc- on se protege contre les petits malins qui auraient la bonne idee d'entrer des caracteres autres que des chiffres */ do { printf("entrez l'age du client: "); fflush(stdout); rv = scanf("%d",&age); purger(); } while (rv != 1); if (age < 20) { /* -tc- pour afficher le caractere '%', on utilise %% dans la chaine de format*/ printf("reduction de 50%%\n"); } do { printf("entrez le statut du client:\n"); printf("1-[etudiant]\n2-[autre]\n"); rv = scanf("%d", &status); purger(); } while (rv != 1 || status < 1 || status > 2); if (status == 1) { if (age < 25 ) { printf("reduction de 50%%\n"); } else if (age < 30) { printf("reduction de 30%%\n"); } } } else if ((choix == 2) && (age < 30)) { printf("reduction de 30%%\n"); } /* -tc- Attention: mois n'a pas ete initialise et 6 <mois < 10 n'est une syntaxe valide en C else if ((age < 23) && (6<mois<10)) */ /* -tc- ??? condition au hasard - je ne comprends pas vraiment ce que tu veux ici...*/ else if (choix == 3 && age < 23) { printf("reduction de 30%%\n"); } /* -tc- pas standard et inutile getch(); */ /* -tc- 0, EXIT_SUCCESS et EXIT_FAILURE sont les 3 valeurs portables que peut retourner main() */ return 0; }
Je m'autorise l'ajout d'une enum, qui à mon avis apporte beaucoup en lisibilité et maintenabilité. J'ai vu sur un autre fil de ce forum un bout de code avec la boucle de message de Windows, exemple de l'utilisation conjointe d'un switch .. case et d'une enum (ou de #define).
Code:
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 #include <stdio.h> /* -tc- pas standard et inutile #include <conio.h> */ /* -tc- permet de faire le menage de maniere portable sur le flux d'entree standard */ void purger(void) { int c; while ((c = fgetc(stdin)) != '\n' && c != EOF) { } } enum choix_destination { choix_asie , choix_afrique , choix_amerique_sud }; const char* DESTINATIONS[] = { "asie" , "afrique" , "amerique du sud" }; /* -tc- main() retourne un entier de type int, toujours */ int main(void) { enum choix_destination destination_choisie; int choix; int age; int status; /* non utilisee int mois; */ int rv; int i; /* -tc- on peut securiser la saisie de cette maniere */ do { printf("choisir le pays de destination du client:\n"); for(i = 0; i < sizeof DESTINATIONS / sizeof *DESTINATIONS; i++) { printf("%d-[%s]\n", i + 1, DESTINATIONS[i]); } rv = scanf("%d", &choix); purger(); } while (rv != 1 || choix < 1 || choix > 3); destination_choisie = choix - 1; switch (destination_choisie) { case choix_asie: printf("Asie\n"); break; case choix_afrique: printf("Afrique\n"); break; case choix_amerique_sud: printf("Amerique du sud\n"); break; } /* if(strcmp(pays,"asie"){ printf("%s",&pays); */ if (destination_choisie == choix_asie) { /* -tc- on se protege contre les petits malins qui auraient la bonne idee d'entrer des caracteres autres que des chiffres */ do { printf("entrez l'age du client: "); fflush(stdout); rv = scanf("%d",&age); purger(); } while (rv != 1); if (age < 20) { /* -tc- pour afficher le caractere '%', on utilise %% dans la chaine de format*/ printf("reduction de 50%%\n"); } do { printf("entrez le statut du client:\n"); printf("1-[etudiant]\n2-[autre]\n"); rv = scanf("%d", &status); purger(); } while (rv != 1 || status < 1 || status > 2); if (status == 1) { if (age < 25 ) { printf("reduction de 50%%\n"); } else if (age < 30) { printf("reduction de 30%%\n"); } } } else if ((destination_choisie == choix_afrique) && (age < 30)) { printf("reduction de 30%%\n"); } /* -tc- Attention: mois n'a pas ete initialise et 6 <mois < 10 n'est une syntaxe valide en C else if ((age < 23) && (6<mois<10)) */ /* -tc- ??? condition au hasard - je ne comprends pas vraiment ce que tu veux ici...*/ else if (destination_choisie == choix_amerique_sud && age < 23) { printf("reduction de 30%%\n"); } /* -tc- pas standard et inutile getch(); */ /* -tc- 0, EXIT_SUCCESS et EXIT_FAILURE sont les 3 valeurs portables que peut retourner main() */ return 0; }
Dans ce cas, autant aller jusqu'au bout. On peut éliminer:
au profit de:Code:
1
2
3
4
5
6
7
8
9
10
11
12 switch (destination_choisie) { case choix_asie: printf("Asie\n"); break; case choix_afrique: printf("Afrique\n"); break; case choix_amerique_sud: printf("Amerique du sud\n"); break; }
ThierryCode:printf("%s\n", DESTINATIONS[destination_choisie]);