programme en c

programme en c - C - Programmation

Marsh Posté le 26-10-2013 à 18:15:37    

bonjour,  
j'ai un problème pour un exercice en cours, voici l'énoncé:  
 
 
 Exercice 8 : Nombre caché.
1. Écrivez un programme qui demande à l’utilisateur de trouver un nombre entier secret
compris entre 0 et 1000. Pour cela il est guidé par le programme qui lui indique à chaque
essai si la valeur saisie est supérieure ou inférieure au nombre secret. Lorsque le jeu se
termine, le programme affiche le nombre d’essais sous la forme : gagné en ... essais.
Vous pouvez soit fixer d’avance la valeur du nombre secret dans le code, soit tirer un nombre
au hasard grâce à la fonction rand() (pas au programme du cours).
2. Modifiez le programme pour autoriser au plus 10 essais à l’utilisateur, et afficher un message
(par exemple perdu !) si l’utilisateur ne parvient pas à deviner le nombre au bout de 10
essais. Parvenez-vous toujours à gagner?
3. On veut maintenant inverser les rôles. Écrivez un programme qui devine un nombre secret
entre 1 et 1000 choisi par l’utilisateur. Le programme doit proposer des nombres, auxquels
l’utilisateur doit répondre par “g”, “p” ou “e” pour indiquer que le nombre proposé est
respectivement plus grand, plus petit, ou égal au nombre deviné. Le programme ne doit
jamais proposer deux fois le même nombre, et doit gagner à tous les coups (si l’utilisateur
ne triche pas).

 
Mon problème se trouve sur cette question, quand j'utilise g, p, e, ça compile mais ça fait n'importe quoi. Pourtant si j'utilise une variable entier ça marche, c'est à dire en utilisant plutôt 1,2 et 3 à la place. Voilà mon code: (je suis sur codeblocks)
 
 

Code :
  1. #include<stdio.h>
  2. int main(){
  3.     int nbrecacher,nbre,i,j;
  4.     char decision;
  5.     printf("Entrez le nombre cache:\n" );
  6.     scanf("%d",&nbrecacher);
  7.     nbre=1000;
  8.     i=1;
  9.     j=2;
  10.     do{
  11.         printf("%d est p:plus petit,g:plus grand, e:egal, par rapport au nombre cache\n",nbre);
  12.         scanf("%d",&decision);
  13.         if(decision== 'p'){
  14.             nbre=nbre+(1000/j);
  15.         }
  16.         if(decision== 'g'){
  17.             nbre=nbre-(1000/j);
  18.         }
  19.         if(decision== 'e'){
  20.             printf("Trouver en %d essais\n",i);
  21.         }
  22.         i++;
  23.         j=j*2;
  24.     }while(i<=10);
  25. }


Message édité par gilou le 27-10-2013 à 14:40:16
Reply

Marsh Posté le 26-10-2013 à 18:15:37   

Reply

Marsh Posté le 26-10-2013 à 19:11:15    

pour lire un caractère, il faut utiliser %c et non %d...

Reply

Marsh Posté le 27-10-2013 à 14:58:43    

Code :
  1. if(decision== 'p'){
  2.             nbre=nbre+(1000/j);
  3.         }
  4.         if(decision== 'g'){
  5.             nbre=nbre-(1000/j);
  6.         }
  7.         if(decision== 'e'){
  8.             printf("Trouver en %d essais\n",i);
  9.         }


 
Pourquoi ne pas faire
 

Code :
  1. switch (decision) {
  2.         case 'p': nbre += 1000/j;
  3.                   break;
  4.         case 'g': nbre -= 1000/j;
  5.                   break;
  6.         case 'e': printf("Trouver en %d essais\n", i);
  7.                   break;
  8.         default: /* erreur a traiter */
  9.                   break;
  10. }


 
A+,


Message édité par gilou le 27-10-2013 à 14:59:27

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