[ C - Gros debutant ]Probleme de scanf

Probleme de scanf [ C - Gros debutant ] - C++ - Programmation

Marsh Posté le 21-12-2002 à 17:13:08    

ca c mon programme :  
#include <stdio.h>
main()
{
 double a;
 double b;
 printf("saisissez un nombre : " );
 fflush(stdin);
 scanf("%d",a);
}
 
et le debogueur de me dit ca :  
warning C4101: 'b' : unreferenced local variable
warning C4700: local variable 'a' used without having been initialized
Deja si k1k1 pouvait m expliquer ce truc  :??:  
Ensuite qd je lance le programme bhe je saisie la valeur et qd j appuie sur enter bhe paf ca fait un erreur...
Bon je suis ultra debutant enprogramation ca doit pas etre une erreur bien difficile a trouver si quelqu un peut m aider je lui en serais tres reconnaissant :)
Merci par avance  :hello:

Reply

Marsh Posté le 21-12-2002 à 17:13:08   

Reply

Marsh Posté le 21-12-2002 à 17:19:21    

>> warning C4101: 'b' : unreferenced local variable
 
'b' est une variable locale que tu n'as utilisé nulle part (tu l'as juste déclarée)
 
>> warning C4700: local variable 'a' used without having been initialized
 
il faut passer un pointeur à scanf : &a. en mettant a, tu donnes la valeur au lieu de son adresse. comme a n'a pas été initialisé, le compilo t'avertit.


Message édité par youdontcare le 21-12-2002 à 17:19:37
Reply

Marsh Posté le 21-12-2002 à 17:29:05    

:pfff:  
 
le code correct est  

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.   double a;
  5.   double b; //inutilisée
  6.   printf("saisissez un nombre : " );
  7.   fflush(stdin); // inutile et inutile et indéfini
  8.   scanf("%lf", &a);
  9. return 0; // ou EXIT_SUCCESS
  10. }


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 21-12-2002 à 18:52:15    

Merci :)

Reply

Marsh Posté le 27-12-2002 à 12:24:43    

je rajouterai que fflush(stdin) n'est pas admis par la norme ansi

Reply

Marsh Posté le 27-12-2002 à 12:27:58    

xav14 a écrit :

je rajouterai que fflush(stdin) n'est pas admis par la norme ansi

déjà dit maintes fois. tout le monde pense que cette ligne est l'intruction ultime alors que j'ai déjà montré comment procéder proprement :sweat:  
 
certains y tiennent, ça leur donne l'impression que leur programme compilé avec leur bcc tourne mieux  :sol:
 
 
les habitudes ont la vie dure


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 27-12-2002 à 13:17:52    

Taz@PPC a écrit :

déjà dit maintes fois. tout le monde pense que cette ligne est l'intruction ultime alors que j'ai déjà montré comment procéder proprement :sweat:  
 
certains y tiennent, ça leur donne l'impression que leur programme compilé avec leur bcc tourne mieux  :sol:
 
 
les habitudes ont la vie dure


hum par contre ...  :whistle:  
 
j'ai honte de le dire mais ce sont les profs de licence info qui nous ont dit ca et a l'époque il n'avait donné aucune raison. alors pourquoi donc que c'est pas propre ? [:twixy]

Reply

Marsh Posté le 27-12-2002 à 13:23:51    

par ce que :
- le fflush ca ne veut dire quelque chose que sur un flux de sortie (finaliser les ecritures bufferisées). sur un flux d'entrée ca ne veut rien dire: donc le langage ne définit pas le comportement. sur certains environnement, ca vide le buffer du flux dans le néant
- la bonne manière c'est de se faire une petite fonction
 

Code :
  1. void my_fflush(FILE *in, int delim)
  2. {
  3.   while(fgetc(in)!=delim));
  4. }
  5. // utilisation
  6. /* si on a rentré une phrase et apres avoir lu les premiers mots, on veut s'en débarasser et demander une ligne suivante */
  7. my_fflush(stdin, '\n');
  8. /* passer au mot suivant */
  9. my_fflush(stdin, ' ');
  10. /* voila le temps désiré fflush(stdin)*/
  11. my_fflush(stdin, EOF);


Message édité par Taz@PPC le 27-12-2002 à 13:24:01

---------------
du bon usage de rand [C] / [C++]
Reply

Sujets relatifs:

Leave a Replay

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