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

  FORUM HardWare.fr
  Programmation
  C

  problème en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème en C

n°1389898
yobo1
Posté le 18-06-2006 à 12:31:04  profilanswer
 

slt,  
j' essay de programmer une sorte de jeu, le pc génère un nombre entre 1 et 100, l' utilisateurs doit donner le bon nombre au pc, si ce n'est pa le bon nombre, le pc "aide" l' utilisateur.
mon problème, c'est que dès que je compile et que je lance mon programme, il me demande le nombre je rentre un nombre entre 1 et 100, j'appuie sur entrée et sa bug, il veut envoyer un rapport d'erreurs a microsoft.
 
voici mon code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, char *argv[])
{
    //on definie les variables
const long MAX = 100, MIN = 1;
long nombreMystere = 0;
long nombreEntree = 0;
 
//generation du nombre
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do
{
              //on demande le nombre
     printf ("quel est le nombre?\n" );
 scanf ("%ld", nombreEntree);
              //on compare le nombre entrée avec le nombre mystere
if (nombreMystere > nombreEntree)
printf ("c'est plus!\n" );
else if (nombreMystere < nombreEntree)
printf ("c'est plus!\n" );
else
printf ("bravo! vous avez trouvez le nombre mystère!!!\n\n" );
 } while (nombreEntree = nombreMystere);
 
  system("PAUSE" );  
  return 0;
}

mood
Publicité
Posté le 18-06-2006 à 12:31:04  profilanswer
 

n°1389906
_kal_
Posté le 18-06-2006 à 12:43:46  profilanswer
 

essai d'enlever l'attribut const à  MAX et MIN
 
Autre chose :  
 

Code :
  1. scanf ("%ld", nombreEntree);


 
il faut lire :
 

Code :
  1. scanf ("%ld", &nombreEntree);


 
C'est quoi ce while :

Code :
  1. while (nombreEntree = nombreMystere);


 
Ici tu ne teste pas l'égalité, mais tu réalise une affectation.
 
Je pense que tu voulais :  
 

Code :
  1. while (nombreEntree != nombreMystere);


Message édité par _kal_ le 18-06-2006 à 12:50:17
n°1389956
yobo1
Posté le 18-06-2006 à 14:07:43  profilanswer
 

ok merci kal, sa marche ;-)

n°1390131
Trap D
Posté le 18-06-2006 à 19:28:19  profilanswer
 

Un compilo bien réglé signale ce genre d'erreurs :
     while (nombreEntree = nombreMystere);

n°1390376
_kal_
Posté le 19-06-2006 à 11:43:13  profilanswer
 

Yep.
 
Evite aussi scanf, utilise plutot fgets et sscanf :jap:

n°1392167
big_dadi_f​at
Posté le 21-06-2006 à 14:21:41  profilanswer
 

_kal_ a écrit :

Yep.
 
Evite aussi scanf, utilise plutot fgets et sscanf :jap:


 
pourquoi ?

n°1392169
Elmoricq
Modérateur
Posté le 21-06-2006 à 14:23:40  profilanswer
 

Parce qu'entre les mains d'un débutant, scanf() est une fonction quiosdfskldjkpquaééà089 ?RPZ?
 
Segmentation fault (core dumped)

n°1392187
big_dadi_f​at
Posté le 21-06-2006 à 14:37:19  profilanswer
 

Elmoricq a écrit :

Parce qu'entre les mains d'un débutant, scanf() est une fonction quiosdfskldjkpquaééà089 ?RPZ?
 
Segmentation fault (core dumped)


 
 :??:  :sleep:  :sleep:  :sleep:

n°1392239
Sve@r
Posté le 21-06-2006 à 15:20:14  profilanswer
 


Parce que "scanf" attend une entrée "formattée" et qu'il s'arrête à tout ce qui ne correspond pas au format, ce qui peut poser des pb
 
Exemple: tu veux faire saisir un nombre puis un texte


int i;
char txt[11];
printf("Entrez un nombre :" );
scanf("%d", &i);
printf("Entrez un texte (10 car max):" );
scanf("%s", txt);


Il y a de grandes chances que tu n'arrives jamais à saisir ton texte. Pourquoi ? Parce que, quand tu tapes ton nombre, tu finis ta saisie par "return" (normal). Mais "scanf" extrait les chiffres du clavier et laisse le "return" qui n'est pas un chiffre. Et lors du "scanf" suivant, ben il lit le "return" qui est resté dans le clavier comme un gland. Tu peux évidemment mettre un "getchar()" juste après la saisie du nombre pour purger ce "return" mais si tu fais un programme pour d'autres personnes, avec "scanf" tu ne peux pas contrôler ce que les autres vont taper. Si l'utilisateur est neuneu, il peut taper "12xqsd" pour le nombre et là, t'es bien avancé.
Et il peut aussi entrer plus de 10 caractères dans la saisie du texte ce qui risque de te provoquer beaucoup de pb.
 
Avec "fgets" 1) tout ce qui entre est du texte que tu peux ensuite controler à ta façon et 2) il limite la saisie selon tes choix ce qui t'évite beaucoup de soucis


int i;
char txt[11];
char buf[1024];
printf("Entrez un nombre :" );
fgets(buf, 1024, stdin);
sscanf(buf, "%d", &i);
printf("Entrez un texte (10 car max):" );
fgets(txt, 11, stdin);


C'est pas beaucoup de travail en plus...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1392242
bjone
Insert booze to continue
Posté le 21-06-2006 à 15:21:53  profilanswer
 

en fait Elmoricq est un bot codé avec des scanf().

mood
Publicité
Posté le 21-06-2006 à 15:21:53  profilanswer
 

n°1392245
bjone
Insert booze to continue
Posté le 21-06-2006 à 15:23:13  profilanswer
 

même
 
do {
printf("Entrez un nombre :" );
fgets(buf, 1024, stdin);
} while( sscanf(buf, "%d", &i) != 1 );
 
c'est pas mal non plus.


Message édité par bjone le 21-06-2006 à 15:23:22
n°1392260
big_dadi_f​at
Posté le 21-06-2006 à 15:40:37  profilanswer
 

merci s@ver  :)  , je comprend mieu mnt
 
 

n°1397772
bipeuh
Posté le 30-06-2006 à 10:19:24  profilanswer
 

yobo1 a écrit :

 
[...]
              //on compare le nombre entrée avec le nombre mystere
if (nombreMystere > nombreEntree)
printf ("c'est plus!\n" );  :pt1cable:  
else if (nombreMystere < nombreEntree)
printf ("c'est plus!\n" ); :pt1cable:  
else
[...]
}


 
juste au passage, tu l'as testé ton prog? tu parviens à trouver la solution?  ;)


---------------
celui qui pose une question est idiot 5 minutes, celui qui n'en pose pas le reste toute sa vie.
n°1397806
Sve@r
Posté le 30-06-2006 à 10:52:29  profilanswer
 

bipeuh a écrit :

juste au passage, tu l'as testé ton prog? tu parviens à trouver la solution?  ;)


[:ddr555] :lol:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1397926
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-06-2006 à 12:16:12  profilanswer
 
n°1397957
big_dadi_f​at
Posté le 30-06-2006 à 12:53:00  profilanswer
 


 
waw c'est trés bien expliqué aussi sur le site d'Emmanuel Delahaye;
merci
 
 
 


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

  problème en C

 

Sujets relatifs
[Resolu]Probleme de JScrollPane et JtextArea[VBA] Problème avec RecordCount
Probleme avec la touche espace[résolu]Probleme sous Visual Studio avec FILE
[PHP] [RESOLU] problème de filtre sur la date dans requête[ldd] problème de lib standard c++
Problème de margeProbleme avec les VTemplate
XML/SAX probléme charsetprobleme exportation base de donnée phpmyadmin
Plus de sujets relatifs à : problème en C


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