Probleme scanf et char

Probleme scanf et char - C - Programmation

Marsh Posté le 01-03-2007 à 16:43:16    

:hello:

 

J'ai fait un petit jeu, plutôt simple, et a la fin je pose une question a l'utilisateur pour lui demander s'il veux rejouer ou non, et j'attend une reponse avec des caracteres ("oui" ou "non" )
Mais ça ne marche pas...
Mon code:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. main()
  5. {
  6.      char rejouer[3], oui[3], non[3];
  7.      do
  8.      {
  9. long nombre1 = 0, nombre2 = 0, resultat = 0;
  10. //blablablacodealanoix
  11. scanf ("%s", &rejouer);
  12. }while (rejouer == oui);
  13. system("PAUSE" );
  14. return 0;
  15. }
 

Merci ;)
(oups, édité ^^')


Message édité par shadowdim le 01-03-2007 à 16:45:45

---------------
Mangas/DVD - Chiptune
Reply

Marsh Posté le 01-03-2007 à 16:43:16   

Reply

Marsh Posté le 01-03-2007 à 16:46:17    

Quels sont les messages d'erreurs ?

Message cité 1 fois
Message édité par 0x90 le 01-03-2007 à 16:59:36

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 01-03-2007 à 16:47:00    

Il te faut réviser la mécanique des pointeurs : regarde le prototype de scanf().
Comme ton titre le fait très pertinemment remarquer, ton utilisation de scanf() est incorrecte, et tu as à peu près correctement isolé le code.

 

Autres remarques  :
- ta définition de main() est incomplète, normalement tu dois explicitement retourner un entier ( int main(void) )
- scanf() n'est pas une fonction à conseiller aux débutants, elle n'est pas triviale à maîtriser et sert, comme son nom l'indique, à la saisie formatée de données. Je te conseille de t'orienter vers fgets(), dans un premier temps.
- on ne compare pas deux chaînes de caractères avec "==". C'est faux : il faut utiliser strcmp(). Là, ton test ne compare que les pointeurs, pas le contenu des zones vers lesquelles ils pointent.
- si tes variables rejouer, oui et non sont sensées contenir "oui" ou "non", alors sache que tu n'as pas attribué suffisament d'espace à tes tableaux : en C, il faut prévoir une case de plus pour le caractère de fin de chaîne \0.

Message cité 1 fois
Message édité par Elmoricq le 01-03-2007 à 16:50:00
Reply

Marsh Posté le 01-03-2007 à 17:13:11    

0x90 a écrit :

Quels sont les messages d'erreurs ?


il n'y en a pas, mais je ne peux pas rejouer, quelque soit ma saisie.

Elmoricq a écrit :

Il te faut réviser la mécanique des pointeurs : regarde le prototype de scanf().
Comme ton titre le fait très pertinemment remarquer, ton utilisation de scanf() est incorrecte, et tu as à peu près correctement isolé le code.
 
Autres remarques  :  
- ta définition de main() est incomplète, normalement tu dois explicitement retourner un entier ( int main(void) )
- scanf() n'est pas une fonction à conseiller aux débutants, elle n'est pas triviale à maîtriser et sert, comme son nom l'indique, à la saisie formatée de données. Je te conseille de t'orienter vers fgets(), dans un premier temps.
- on ne compare pas deux chaînes de caractères avec "==". C'est faux : il faut utiliser strcmp(). Là, ton test ne compare que les pointeurs, pas le contenu des zones vers lesquelles ils pointent.
- si tes variables rejouer, oui et non sont sensées contenir "oui" ou "non", alors sache que tu n'as pas attribué suffisament d'espace à tes tableaux : en C, il faut prévoir une case de plus pour le caractère de fin de chaîne \0.


Merci beaucoup pour la reponse précise, pour les conseils, et pour le reste :o
 
-Pour scanf, je l'utilise en cours (je suis en seconde avec option MPI) et ça marche bien (mais on a pas touché aux char :/)
-Pour les variables qui doivent contenir une case de plus, je croyais que c'etait seulement quand j'avais besoin de les afficher... Merci :)
 
 :hello:


---------------
Mangas/DVD - Chiptune
Reply

Marsh Posté le 01-03-2007 à 17:35:20    

shadowdim a écrit :

Pour scanf, je l'utilise en cours (je suis en seconde avec option MPI) et ça marche bien ...


http://mapage.noos.fr/emdel/notes.htm#saisie

Reply

Sujets relatifs:

Leave a Replay

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