Probleme exo simple en C

Probleme exo simple en C - C - Programmation

Marsh Posté le 14-09-2014 à 11:52:26    

Bonjour tout le monde je débute dans le C,
 
j'ai un petit exercice a faire sauf que je n'ai pas encore appris comment utiliser if, else, if else…
 

Code :
  1. /**
  2. * @brief Exercice d'aptitude au passage du permis de conduire.
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. int main()
  8. {
  9. char age[3],heure[3],code[3],pratique[3];
  10. printf("Dans les questions suivante vous répondrez \"oui\" ou par \"non\". \n" );
  11. // Ne pouvant pas utiliser le Booléen en C j'ai utilisé if et else.
  12. printf("Etes vous majeur ?\n" );
  13. scanf("%s", age);
  14. if(strcmp(age, "non" ))
  15. printf("Avez vous fait un minimum de 21h de conduite ?\n" );
  16. scanf("%s", heure);
  17. if(strcmp(heure, "non" ))
  18. printf("Avez vous votre code  ?\n" );
  19. scanf("%s", code);
  20. if(strcmp(code, "non" ))
  21. printf("Avez vous pratiquer un an de conduite accompagné ? \n" );
  22. scanf("%s", pratique);
  23. if(strcmp(pratique, "non" ))
  24. printf("Vous êtes apte a passer le permis.\n" );
  25. else
  26. printf("Vous n'êtes pas apte a passer le permis.\n" );
  27. return EXIT_SUCCESS;
  28. }

 
 
Là quand je compile sa fonctionne si je repond "oui" ou une autre chaine de 3 caractères
mais quand je met "non" dans les 3 premières questions le message comme quoi je ne suis pas apte a passer le permis ne s'affiche pas..

Reply

Marsh Posté le 14-09-2014 à 11:52:26   

Reply

Marsh Posté le 14-09-2014 à 12:54:42    

Bon j'ai réussis comme un grand ;)

Code :
  1. /**
  2. * @brief Exercice d'aptitude au passage du permis de conduire.
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. int main()
  8. {
  9. char age[3],heure[3],code[3],pratique[3];
  10. printf("Dans les questions suivante vous répondrez \"oui\" ou par \"non\". \n" );
  11. // Ne pouvant pas utiliser le Booléen en C j'ai utilisé if et else.
  12. printf("Etes vous majeur ?\n" );
  13. scanf("%s", age);
  14. if(strcmp(age, "non" ))
  15. printf("Avez vous fait un minimum de 21h de conduite ?\n" );
  16. else
  17. {
  18. printf("Vous n'êtes pas apte a passer le permis.\n" );
  19. return EXIT_SUCCESS;
  20. }
  21. scanf("%s", heure);
  22. if(strcmp(heure, "non" ))
  23. printf("Avez vous votre code  ?\n" );
  24. else
  25. {
  26. printf("Vous n'êtes pas apte a passer le permis.\n" );
  27. return EXIT_SUCCESS;
  28. }
  29. scanf("%s", code);
  30. if(strcmp(code, "non" ))
  31. printf("Avez vous pratiquer un an de conduite accompagné ? \n" );
  32. else
  33. {
  34. printf("Vous n'êtes pas apte a passer le permis.\n" );
  35. return EXIT_SUCCESS;
  36. }
  37. scanf("%s", pratique);
  38. if(strcmp(pratique, "non" ))
  39. printf("Vous êtes apte a passer le permis.\n" );
  40. else
  41. printf("Vous n'êtes pas apte a passer le permis.\n" );
  42. return EXIT_SUCCESS;
  43. }

Reply

Marsh Posté le 14-09-2014 à 18:26:58    

Bravo, félicitations.


---------------
Toute expression prend un sens spirituel qui nous influence dans notre quête de l'Homme.
Reply

Marsh Posté le 15-09-2014 à 16:59:28    

Bon, ton code est probablement pas bon (sinon, il faudrait 21h de conduite et 1 an de conduite accompagnée pour remplir les conditions :D)
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 :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5. #include <ctype.h>
  6. // fonction blindée de lecture du terminal en entrée
  7. // a garder dans sa bibli de code
  8. int read_input(char *s, int n, bool clean)
  9. {
  10.     int last = 0;
  11.     if (n > 0) {
  12.         char *p;
  13.         if ((p = fgets(s, n, stdin))) {
  14.             last = strlen(s) - 1;
  15.             if (s[last] == '\n') {
  16.                 s[last] = '\0';
  17.             } else {
  18.                 scanf("%*[^\n]" );
  19.                 getchar();
  20.                 last = n - 1;
  21.             }
  22.         }
  23.     }
  24.     // retire les espaces de début et fin
  25.     if (clean) {
  26.         char *i = s;
  27.         while (isspace(*i)) ++i;
  28.         if (i != s) {
  29.             char *j = s;
  30.             last -= (i - s);
  31.             while (*i) *j++ = *i++;
  32.             s[last] = '\0';
  33.         }
  34.         i = s + last;
  35.         while ( --i >= s && isspace(*i)) --last;
  36.         s[last] = '\0';
  37.     }
  38.     return last;
  39. }
  40. bool oui_non(char *question)
  41. {
  42. #define BUFSIZE 80
  43.     char buffer[BUFSIZE];
  44.     printf("%s ?  ", question);
  45.     fflush(stdout);
  46.     int read = read_input(buffer, sizeof buffer, true);
  47.     if (read == 3) {
  48.         if (!strncasecmp("oui", buffer, 3)) {
  49.             return true;
  50.         }
  51.         if (!strncasecmp("non", buffer, 3)) {
  52.             return false;
  53.         }
  54.     } else if (read == 1) {
  55.         if (!strncasecmp("o", buffer, 1)) {
  56.             return true;
  57.         }
  58.         if (!strncasecmp("n", buffer, 1)) {
  59.             return false;
  60.         }
  61.     }
  62.     printf("Reponse invalide. Fin du programme\n" );
  63.     exit(EXIT_FAILURE);
  64. }
  65. int main()
  66. {
  67.     printf("Dans les questions suivante vous répondrez \"oui\" ou par \"non\".\n\n" );
  68.     bool majeur  = oui_non("Etes vous majeur" );
  69.     bool heures  = oui_non("Avez vous fait un minimum de 21h de conduite" );
  70.     bool code  = oui_non("Avez vous votre code" );
  71.     bool pratique  = oui_non("Avez vous pratiquer un an de conduite accompagnee" );
  72.     // mettre les conditions à valider comme il faut
  73.     if ((majeur && heures && code)
  74.             || (majeur && pratique  && code)) {
  75.         printf("Vous etes apte a passer le permis.\n" );
  76.     } else {
  77.         printf("Vous n'etes pas apte a passer le permis.\n" );
  78.     }
  79.     return EXIT_SUCCESS;
  80. }


 
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é!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed