gilou Modérateur Modzilla | Bon, ton code est probablement pas bon (sinon, il faudrait 21h de conduite et 1 an de conduite accompagnée pour remplir les conditions )
Comme tu donnais pas les bon critères, j'ai posé toutes les questions, mais il y a probablement plus simple si tu expliques les conditions à remplir.
Un premier point: ne jamais faire de scanf sur un input utilisateur, ça a toutes les chances de merder parce qu'il va taper autre chose que ce qui est attendu
Utiliser une fonction utilitaire blindée comme par exemple celle que j'ai mise dans mon code.
Un second point, comme ton code est assez répétitif, essayer de mettre dans une fonction le code qui se répète (ici, la fonction oui_non, qui pose une question a laquelle on répond par oui ou non, et qui renvoie un booleen.
Un troisième point, il y a des booleens en C (sauf compilateur de l'age de pierre), il faut utiliser le header stdbool.h
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdbool.h>
- #include <ctype.h>
- // fonction blindée de lecture du terminal en entrée
- // a garder dans sa bibli de code
- int read_input(char *s, int n, bool clean)
- {
- int last = 0;
- if (n > 0) {
- char *p;
- if ((p = fgets(s, n, stdin))) {
- last = strlen(s) - 1;
- if (s[last] == '\n') {
- s[last] = '\0';
- } else {
- scanf("%*[^\n]" );
- getchar();
- last = n - 1;
- }
- }
- }
- // retire les espaces de début et fin
- if (clean) {
- char *i = s;
- while (isspace(*i)) ++i;
- if (i != s) {
- char *j = s;
- last -= (i - s);
- while (*i) *j++ = *i++;
- s[last] = '\0';
- }
- i = s + last;
- while ( --i >= s && isspace(*i)) --last;
- s[last] = '\0';
- }
- return last;
- }
- bool oui_non(char *question)
- {
- #define BUFSIZE 80
- char buffer[BUFSIZE];
- printf("%s ? ", question);
- fflush(stdout);
- int read = read_input(buffer, sizeof buffer, true);
- if (read == 3) {
- if (!strncasecmp("oui", buffer, 3)) {
- return true;
- }
- if (!strncasecmp("non", buffer, 3)) {
- return false;
- }
- } else if (read == 1) {
- if (!strncasecmp("o", buffer, 1)) {
- return true;
- }
- if (!strncasecmp("n", buffer, 1)) {
- return false;
- }
- }
- printf("Reponse invalide. Fin du programme\n" );
- exit(EXIT_FAILURE);
- }
- int main()
- {
- printf("Dans les questions suivante vous répondrez \"oui\" ou par \"non\".\n\n" );
- bool majeur = oui_non("Etes vous majeur" );
- bool heures = oui_non("Avez vous fait un minimum de 21h de conduite" );
- bool code = oui_non("Avez vous votre code" );
- bool pratique = oui_non("Avez vous pratiquer un an de conduite accompagnee" );
- // mettre les conditions à valider comme il faut
- if ((majeur && heures && code)
- || (majeur && pratique && code)) {
- printf("Vous etes apte a passer le permis.\n" );
- } else {
- printf("Vous n'etes pas apte a passer le permis.\n" );
- }
- return EXIT_SUCCESS;
- }
|
Si tu indiques clairement les bonnes conditions a remplir pour pouvoir passer le permis (être majeur + code + 21h, ou ...) je te change ce code par un qui utilise des if et ne pose que les questions utiles.
A+, Message édité par gilou le 15-09-2014 à 17:07:28 ---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --
|