Pb avec scanf les valeurs ne sont pas lues

Résolu
Bonjour,
Je debute en C++ et j'utilise devc++ voici le prog du cours :

#include <stdio.h> /* Autorise l'emploi de printf et de scanf. */
#include <stdlib.h> /*permet d'utiliser la commande system ("pause" ); pour ne pas fermer la console*/
long double x ,y;

int main(void)
{
printf("Calcul de moyenne\n"); /* Affiche le titre. */
printf("Entrez le premier nombre : ");
scanf("%Lf", &x); /* Entre le premier nombre. */
printf("\nEntrez le deuxième nombre : ");
scanf("%Lf", &y); /* Entre le deuxième nombre. */
printf("\nLa valeur moyenne de %Lf et de %Lf est %Lf.\n", x, y, (x+y)/2);
system ("pause" );
return 0;
}

Le probleme c'est que le programme lit correctement la valeur de x (il affiche 5 si je tape 5) mais pour y il affiche 0 peu importe le nombre voici ce qu'affiche la console se serat peut etre plus clair.

Calcul de moyenne
Entrez le premier nombre : 5

Entrez le deuxiÞme nombre : 5

La valeur moyenne de 5.000000 et de 0.000000 est 0.000000.
Appuyez sur une touche pour continuer...

quelle est le probleme??
Configuration: Windows XP
Internet Explorer 7.0

8 réponses

  1. Modérateur
    Aucune idée chez moi ça fonctionne correctement.
    (mando@aldur) (~) $ gcc -W -Wall plop.c
    (mando@aldur) (~) $ ./a.out
    Calcul de moyenne
    Entrez le premier nombre : 5555555555
    
    Entrez le deuxième nombre : 55588888
    
    La valeur moyenne de 5555555555.000000 et de 55588888.000000 est 2805572221.500000.

    Est-ce que tu peux essayer en utilisant des doubles (au lieu des long double) et en lisant avec "%lf" ?

    Bonne chance
    0
    1. Modérateur
      Quelques remarques pas très importantes
      - Tu peux sous entendre le void dans int main(void)
      - Evite les variables globales, x et y devraient simplement être déclarées dans le main
      - A priori l'utilisation de long double est un peu abusive, tu peux te contenter de double dans la très grande majorité des cas.

      Chez moi ce programme marche :
      #include <stdio.h>
      
      int main(){
          long double x ,y;
          printf("Calcul de moyenne\n");
          printf("Entrez le premier nombre : ");
          scanf("%Lf", &x);
          printf("\nEntrez le deuxième nombre : ");
          scanf("%Lf", &y);
          printf("\nLa valeur moyenne de %Lf et de %Lf est %Lf.\n", x, y, (x+y)/2);
          return 0;
      }

      Ce qui donne :
      (mando@aldur) (~) $ gcc -W -Wall plop.c
      (mando@aldur) (~) $ ./a.out
      Calcul de moyenne
      Entrez le premier nombre : 5
      
      Entrez le deuxième nombre : 7
      
      La valeur moyenne de 5.000000 et de 7.000000 est 6.000000.

      Je t'avoue que dans ton code je ne vois pas d'erreur tu es sûr d'avoir recompilé ?
      -1
      1. oui j'ai bien recompiler mais rien n'y fait même en prenant des variables locales. Ca vient peut etre du compilateur j'utilise dev c++
        -1
        1. Modérateur
          Ben dev C++ repose sur gcc et tu as bien vu que j'ai compilé avec gcc. C'est vraiment bizarre :s
          Par contre tu as peut être une vieille version bugguée qui sait ? Tu es sûr de recompiler le bon fichier source et de lancer le bon exécutable ?

          Bonne chance
          -1
          1. oui je recompile le bon fichier , je lance lance le bon executable j'essaye de mettre a jour dev c++ -(version 4.9.9.2) et ce n'est pas mieux.
            ca ne pourrait pas venir de la console en elle même ou d'application windws utilisé?
            -1
            1. nouvelle bizarrerie, si ca peut t'aider !

              Calcul de moyenne
              Entrez le premier nombre : 5555555555

              Entrez le deuxiÞme nombre : 55588888

              La valeur moyenne de 5555555555.000000 et de -2.000000 est 0.000000.
              Appuyez sur une touche pour continuer...
              -1
              1. ouui ca y est ! ca marche c'était bien à cause des long double, je comprend pas pourquoi mais ca marche! Merci beaucoup j'espere que je n'aurais jamais besoin des long double.
                -1
                1. Modérateur
                  Ahaha bon ben c'est bon à savoir, ça marche sous linux mais pas windows. Rassure toi les long double ne servent en pratique jamais, les double sont suffisants dans la très grande majorité des cas. En tout cas c'est cool que ton problème soit résolu !

                  A bientôt
                  -1