Programmation en C

Programmation en C - C - Programmation

Marsh Posté le 15-12-2013 à 21:50:09    

Bonjour, je suis étudiant en automation et je dois réaliser un programme "devinette" que je n'arrive pas à terminer,... Si quelqu'un pouvait m'aider ce serait gentil car je ne vois pas ou se trouve mon (mes erreurs) ! Voici l'énoncé et ma resolution :
 
Réalisez un programme qui demande à l’utilisateur de choisir un nombre compris entre 1 et  
8, puis qui parvient à déduire ce nombre à l’aide de trois questions posées à l’utilisateur (la  
réponse est soit 'o' pour oui, soit 'n' pour non).  
Voici un exemple d’exécution :  
Choisissez un nombre entre 1 et 8  
Appuyez sur une touche pour continuer...  
Ce nombre est-il supérieur ou égal à 5 ? (o/n) n  
Ce nombre est-il supérieur ou égal à 3 ? (o/n) o  
Ce nombre est-il 3 ? (o/n) n  
C’est le nombre 4  
 
 
Et voici ma resolution :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. int main()
  5. {
  6. char c,d,e,f,g,h,i,j;
  7. printf("\nChoisissez un nombre compris entre 1 et 8." );
  8. printf("\n\nVous avez choisi ? 'o' = oui et 'n' = non :  " );
  9. scanf("%c",&c);
  10. if (c=='o')
  11. {
  12. printf("Votre nombre est-il superieur ou egal a 5 ?  " );
  13. scanf("%c",&d);
  14. if(d=='o')
  15. {
  16.  printf("Votre nombre est%cil superieur ou egal a 7 ?  ",45);
  17.  scanf("%c",&e);
  18.  if(e=='o')
  19.  {
  20.   printf("Le nombre est il egal a 7 ?" );
  21.   scanf("%c",&f);
  22.   if(f=='o')
  23.   {
  24.    printf("Le nombre recherche est donc 7 !" );
  25.   }
  26.   else if(f=='n')
  27.   {
  28.    printf("Le nombre recherche est donc 8 !" );
  29.   }
  30.  }
  31.  else if(e=='n')
  32.  {
  33.   printf("Votre nombre est-il egal a 6 ?" );
  34.   scanf("%c",&g);
  35.   if(g=='o')
  36.   {
  37.    printf("Le nombre recherche est donc 6 !" );
  38.   }
  39.   else if(g=='n')
  40.   {
  41.    printf("Le nombre recherche est donc 5 !" );
  42.   }
  43.  }
  44. }
  45. else if(d=='n')
  46. {
  47.  printf("Votre nombre est-il superieur ou egal a 3 ?" );
  48.  scanf("%c", &h);
  49.  if(h=='o')
  50.  {
  51.   printf("Votre nombre est-il egal a 3 ?" );
  52.   scanf("%c",&i);
  53.   if(i=='o')
  54.   {
  55.    printf("Le nombre recherche est donc egal a 3" );
  56.   }
  57.   else if(i=='n')
  58.   {
  59.    printf("Le nombre recherche est donc egal a 4" );
  60.   }
  61.  }
  62.  else if(h=='n')
  63.  {
  64.   printf("Votre nombre est-il egal a 2 ?" );
  65.   scanf("%c",&j);
  66.   if(j=='o')
  67.   {
  68.    printf("Le nombre recherche est donc egal a 2 !" );
  69.   }
  70.   else if(j=='n')
  71.   {
  72.    printf("Le nombre recherche est donc egal a 1 !" );
  73.   }
  74.  }
  75. }
  76. }
  77. else if(c=='n')
  78. {
  79. printf("Rejouez plus tard alors, au revoir." );
  80. }
  81. getch();
  82. }


 
 
 
Voila, merci pour votre aide, j'ai réalisé des programmes bien plus difficiles que celui ci mais pourtant je n'arrive pas à trouver mon erreur ! Merci beaucoup pour votre aide, bonne soirée :)

Message cité 1 fois
Message édité par gilou le 15-12-2013 à 22:08:03
Reply

Marsh Posté le 15-12-2013 à 21:50:09   

Reply

Marsh Posté le 15-12-2013 à 22:12:46    

joko7 a écrit :

Bonjour, je suis étudiant en automation et je dois réaliser un programme "devinette" que je n'arrive pas à terminer,... Si quelqu'un pouvait m'aider ce serait gentil car je ne vois pas ou se trouve mon (mes erreurs) ! Voici l'énoncé et ma resolution :
 
Réalisez un programme qui demande à l’utilisateur de choisir un nombre compris entre 1 et  
8, puis qui parvient à déduire ce nombre à l’aide de trois questions posées à l’utilisateur (la  
réponse est soit 'o' pour oui, soit 'n' pour non).  
Voici un exemple d’exécution :  
Choisissez un nombre entre 1 et 8  
Appuyez sur une touche pour continuer...  
Ce nombre est-il supérieur ou égal à 5 ? (o/n) n  
Ce nombre est-il supérieur ou égal à 3 ? (o/n) o  
Ce nombre est-il 3 ? (o/n) n  
C’est le nombre 4  
 
 
Et voici ma resolution :
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main()
{
char c,d,e,f,g,h,i,j;
 
printf("\nChoisissez un nombre compris entre 1 et 8." );
 
printf("\n\nVous avez choisi ? 'o' = oui et 'n' = non :  " );
scanf("%c",&c);
 
if (c=='o')
{
 printf("Votre nombre est-il superieur ou egal a 5 ?  " );
 scanf("%c",&d);
 
 if(d=='o')
 {
  printf("Votre nombre est%cil superieur ou egal a 7 ?  ",45);
  scanf("%c",&e);
 
  if(e=='o')
  {
   printf("Le nombre est il egal a 7 ?" );
   scanf("%c",&f);
 
   if(f=='o')
   {
    printf("Le nombre recherche est donc 7 !" );
   }
 
 
   else if(f=='n')
   {
    printf("Le nombre recherche est donc 8 !" );
   }
  }
  else if(e=='n')
  {
   printf("Votre nombre est-il egal a 6 ?" );
   scanf("%c",&g);
 
   if(g=='o')
   {
    printf("Le nombre recherche est donc 6 !" );
   }
   else if(g=='n')
   {
    printf("Le nombre recherche est donc 5 !" );
   }
  }
 }
 else if(d=='n')
 {
  printf("Votre nombre est-il superieur ou egal a 3 ?" );
  scanf("%c", &h);
 
  if(h=='o')
  {
   printf("Votre nombre est-il egal a 3 ?" );
   scanf("%c",&i);
 
   if(i=='o')
   {
    printf("Le nombre recherche est donc egal a 3" );
   }
   else if(i=='n')
   {
    printf("Le nombre recherche est donc egal a 4" );
   }
  }
  else if(h=='n')
  {
   printf("Votre nombre est-il egal a 2 ?" );
   scanf("%c",&j);
 
   if(j=='o')
   {
    printf("Le nombre recherche est donc egal a 2 !" );
   }
   else if(j=='n')
   {
    printf("Le nombre recherche est donc egal a 1 !" );
   }
  }
 }
}
else if(c=='n')
{
 printf("Rejouez plus tard alors, au revoir." );
}
getch();
}
 
 
 
Voila, merci pour votre aide, j'ai réalisé des programmes bien plus difficiles que celui ci mais pourtant je n'arrive pas à trouver mon erreur ! Merci beaucoup pour votre aide, bonne soirée :)


 
Bonjour,
 
Le problème vient du fait que l'utilisateur saisit sa réponse puis appuie sur entrée : le premier scanf prend la réponse et le second scanf prend l'appuie sur la touche entrée.
Pour résoudre cela, une façon de faire est d'effacer le buffer d'input avec

Code :
  1. fflush(stdin);


Plus d'information : http://stackoverflow.com/questions [...] uffer-in-c (l'usage de scanf est également déconseillé : http://c-faq.com/stdio/scanfprobs.html)
Par exemple :  

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. int main()
  5. {
  6. char c,d,e,f,g,h,i,j;
  7. printf("\nChoisissez un nombre compris entre 1 et 8." );
  8. printf("\n\nVous avez choisi ? 'o' = oui et 'n' = non :  " );
  9. scanf("%c",&c);
  10. fflush(stdin);
  11. if (c=='o')
  12. {
  13.  printf("Votre nombre est-il superieur ou egal a 5 ?  " );
  14.  scanf("%c",&d);
  15.  fflush(stdin);
  16.  if(d=='o')
  17.  {
  18.   printf("Votre nombre est%cil superieur ou egal a 7 ?  " );
  19.   scanf("%c",&e);
  20.   fflush(stdin);
  21.   if(e=='o')
  22.   {
  23.    printf("Le nombre est il egal a 7 ?" );
  24.    scanf("%c",&f);
  25.    fflush(stdin);
  26.    if(f=='o')
  27.    {
  28.     printf("Le nombre recherche est donc 7 !" );
  29.    }
  30.    else if(f=='n')
  31.    {
  32.     printf("Le nombre recherche est donc 8 !" );
  33.    }
  34.   }
  35.   else if(e=='n')
  36.   {
  37.    printf("Votre nombre est-il egal a 6 ?" );
  38.    scanf("%c",&g);
  39.    fflush(stdin);
  40.    if(g=='o')
  41.    {
  42.     printf("Le nombre recherche est donc 6 !" );
  43.    }
  44.    else if(g=='n')
  45.    {
  46.     printf("Le nombre recherche est donc 5 !" );
  47.    }
  48.   }
  49.  }
  50.  else if(d=='n')
  51.  {
  52.   printf("Votre nombre est-il superieur ou egal a 3 ?" );
  53.   scanf("%c", &h);
  54.   fflush(stdin);
  55.   if(h=='o')
  56.   {
  57.    printf("Votre nombre est-il egal a 3 ?" );
  58.    scanf("%c",&i);
  59.    fflush(stdin);
  60.    if(i=='o')
  61.    {
  62.     printf("Le nombre recherche est donc egal a 3" );
  63.    }
  64.    else if(i=='n')
  65.    {
  66.     printf("Le nombre recherche est donc egal a 4" );
  67.    }
  68.   }
  69.   else if(h=='n')
  70.   {
  71.    printf("Votre nombre est-il egal a 2 ?" );
  72.    scanf("%c",&j);
  73.    fflush(stdin);
  74.    if(j=='o')
  75.    {
  76.     printf("Le nombre recherche est donc egal a 2 !" );
  77.    }
  78.    else if(j=='n')
  79.    {
  80.     printf("Le nombre recherche est donc egal a 1 !" );
  81.    }
  82.   }
  83.  }
  84. }
  85. else if(c=='n')
  86. {
  87.  printf("Rejouez plus tard alors, au revoir." );
  88. }
  89. getch();
  90. }

Message cité 1 fois
Message édité par honrisse le 15-12-2013 à 22:16:06
Reply

Marsh Posté le 15-12-2013 à 22:47:58    

Parfait, merci beaucoup ! Bonne soirée et merci d'avoir pris le temps de répondre :)

Reply

Marsh Posté le 16-12-2013 à 19:36:37    

honrisse a écrit :

Pour résoudre cela, une façon de faire est d'effacer le buffer d'input avec

Code :
  1. fflush(stdin);



Non, c'est justement ce qu'il ne faut pas faire, le comportement de fflush avec stdin n'étant pas défini de manière standard.

  • while((c = getchar()) != '\n' && c != EOF):

ou  

  • fseek(stdin, 0, SEEK_END);

devrait faire l'affaire.
A+,


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