Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1507 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probleme exo simple en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme exo simple en C

n°2237955
Edomath
Posté le 14-09-2014 à 11:52:26  profilanswer
 

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..

mood
Publicité
Posté le 14-09-2014 à 11:52:26  profilanswer
 

n°2237956
Edomath
Posté le 14-09-2014 à 12:54:42  profilanswer
 

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. }

n°2237961
par l'anne​au de l'ia
word master
Posté le 14-09-2014 à 18:26:58  profilanswer
 

Bravo, félicitations.


---------------
Toute expression prend un sens spirituel qui nous influence dans notre quête de l'Homme.
n°2238012
gilou
Modérateur
Modzilla
Posté le 15-09-2014 à 16:59:28  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probleme exo simple en C

 

Sujets relatifs
[Résolu] Probleme execution de script php avec cronProblème RegEx et accent
C++ : Ajouter une ligne à un fichier txtProblème basique HTML / CSS
Par défaut C++ : appeler un .exe depuis le codeProbleme menu onglet
problème de formulaire mailC# et connexion mySQL erreur 1042
problème de compilationproblème de mise à jour de la BD
Plus de sujets relatifs à : Probleme exo simple en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR