Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème convertisseur euros-francs

Sujet résolu
    6 octobre 2021 à 15:43:02

    Bonjour à tous,

    Je débute en C et je tente de créer un programme console qui converti les francs en euros et inversement. Je veux laisser le choix à l'utilisateur au début du programme. J'ai donc fait le code suivant :

    #include <stdio.h>
    #include <stdlib.h>
    
    double conversionFrancs (double nombre)
    {
        return nombre / 6.5;
    }
    
    double conversionEuros (double nombre)
    {
        return nombre * 6.5;
    }
    
    int main(int argc, char *argv[])
    {
        double nombreEntre = 0, prixConverti = 0, choixConversion = 0;
    
        printf("Bievenue dans notre calculatrice de conversion francs-euros\n");
        printf("Voulez-vous convertir un prix :\n 1. Francs --> Euros\n 2. Euros --> Francs\n");
        scanf("%ld", &choixConversion);
        printf("Entrez le prix a convertir : ");
        scanf("%ld", &nombreEntre);
    
        if (choixConversion != 2)
        {
            prixConverti = conversionFrancs(nombreEntre);
            printf("%ld", prixConverti);
        }
        else
        {
            prixConverti = conversionEuros(nombreEntre);
            printf("%ld",prixConverti);
        }
        return 0;
    }

    Or, quand j'exécute mon programme, je peux choisir entre 1 et 2, mais quand je rentre un prix, ca ne renvoi rien et je ne parviens pas à comprendre ou est mon erreur....

    Merci d'avance beaucoup pour vos réponses !!

    AO

    -
    Edité par AlexDev83 6 octobre 2021 à 17:49:13

    • Partager sur Facebook
    • Partager sur Twitter
      6 octobre 2021 à 15:49:52

      Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).

      Il faut revoir les spécificateurs de format pour scanf et printf. %d --> int, %lf -> double... ect... 
      Et ne pas oublier que scanf attend l'adresse de la variable à modifier.

      -
      Edité par rouIoude 6 octobre 2021 à 15:56:11

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        6 octobre 2021 à 17:37:23

        Tu dis que ça ne retourne rien. Ça doit te retourner un message d'erreur du genre "Segmentation fault" que tu ne vois peut-être pas.
        rouIoude t'a donné la raison. Il faut écrire &nombreEntre dans le scanf.
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          6 octobre 2021 à 18:11:34

          Bonjour à tous les deux et merci pour vos réponses,

          J'ai modifié le code en fonction de vos conseils (je pense n'avoir rien oublié). C'est beaucoup mieux car le programme fonctionne, mais à moitié :/ Peu importe le choix que je fait au départ, il fait la même opération, à savoir la conversion de francs en euros. Je comprends vraiment pas :/

          #include <stdio.h>
          #include <stdlib.h>
           
          double conversionFrancs (double nombre)
          {
              return nombre / 6.5;
          }
           
          double conversionEuros (double nombre)
          {
              return nombre * 6.5;
          }
           
          int main(int argc, char *argv[])
          {
              double nombreEntre = 0, prixConverti = 0, choixConversion = 0;
           
              printf("Bievenue dans notre calculatrice de conversion francs-euros\n");
              printf("Voulez-vous convertir un prix :\n 1. Francs --> Euros\n 2. Euros --> Francs\n");
              scanf("%ld", &choixConversion);
              printf("Entrez le prix a convertir : ");
              scanf("%ld", &nombreEntre);
           
              if (choixConversion != 2)
              {
                  prixConverti = conversionFrancs(nombreEntre);
                  printf("%ld", prixConverti);
              }
              else
              {
                  prixConverti = conversionEuros(nombreEntre);
                  printf("%ld",prixConverti);
              }
              return 0;
          }

          EDIT : J'ai suivi tes conseils edgarjacobs, j'insère donc le nouveau code ici et vais lire de ce pas les manuels. Merci bien ! :)

          -
          Edité par AlexDev83 6 octobre 2021 à 18:49:56

          • Partager sur Facebook
          • Partager sur Twitter
            6 octobre 2021 à 18:35:30

            Hello,

            Il faut absolument que tu lises le manuel de printf() et scanf().

             %ld c'est pour des entiers, pas pour des float.

            Edit: plutôt que modifier ton 1er post, tu aurais dû mettre le nouveau code dans le dernier post.

            -
            Edité par edgarjacobs 6 octobre 2021 à 18:36:49

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              6 octobre 2021 à 19:02:34

              Je reposte le code que j'ai corrigé en fonction des conseils d'edgarjacobs. J'ai compris mon erreur précédente sauf que maintenant, je pense avoir bien corrigé le truc sauf que j'ai systématiquement comme résultat 0.000 et surtout j'ai toujours ce même problème avec le choix de convertir francs euros ou euros francs :/ 

              double conversionFrancs (double nombre)
              {
                  return nombre / 6.5;
              }
              
              double conversionEuros (double nombre)
              {
                  return nombre * 6.5;
              }
              
              int main(int argc, char *argv[])
              {
                  double nombreEntre = 0, prixConverti = 0, choixConversion = 0;
              
                  printf("Bievenue dans notre calculatrice de conversion francs-euros\n");
                  printf("Voulez-vous convertir un prix :\n 1. Francs --> Euros\n 2. Euros --> Francs\n");
                  scanf("%f", &choixConversion);
                  printf("Entrez le prix a convertir : ");
                  scanf("%f", &nombreEntre);
              
                  if (choixConversion == 1 )
                  {
                      prixConverti = conversionFrancs(nombreEntre);
                      printf("%f", prixConverti);
                  }
                  else
                  {
                      prixConverti = conversionEuros(nombreEntre);
                      printf("%f",prixConverti);
                  }
                  return 0;
              }
              

              Merci encore à tous ceux qui m'ont déjà répondu et au(x) prochain(s)

              • Partager sur Facebook
              • Partager sur Twitter
                6 octobre 2021 à 19:21:53

                Il y a une subtilité entre printf() et scanf(). Si printf() accepte le format %f pour les float et les doubles, scanf() fait la distinction: %f pour float, %lf pour double.

                Edit: et pour un choix (choixConversion), je te conseille d'utiliser un int (et donc le format %d)

                -
                Edité par edgarjacobs 6 octobre 2021 à 19:24:26

                • Partager sur Facebook
                • Partager sur Twitter

                On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                  6 octobre 2021 à 19:27:28

                  On lit les choix en entier (int) et les valeur en double.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                    6 octobre 2021 à 19:31:21

                    edgarjacobs a écrit:

                    Il y a une subtilité entre printf() et scanf(). Si printf() accepte le format %f pour les float et les doubles, scanf() fait la distinction: %f pour float, %lf pour double.

                    Autrefois je me faisais toujours piéger par cette subtilité qui était une incohérence surprenante pour un langage sérieux. Depuis que j'ai compris que le format des 'double' est %lf, avec 'printf' comme avec 'scanf', je ne suis plus embêté.

                    Je vous encourage à faire comme moi : %f pour les 'float', %lf pour les 'double'. (Et j'encourage les cours à enseigner ça plutôt que de mettre de la confusion dans les cerveaux vulnérables des débutants...)

                    -
                    Edité par robun 6 octobre 2021 à 19:36:23

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 octobre 2021 à 20:18:32

                      MERCI A TOUS !!!!! 

                      Ca marche ENFIN ! Je m'arrachait les cheveux avec ca ! Du coup, je pense que je m'en souviendrais du %f et du %lf :lol:

                      Merci à tous encore pour votre aide et vos conseils ! 

                      -
                      Edité par AlexDev83 6 octobre 2021 à 20:19:53

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 octobre 2021 à 21:28:02

                        En fait printf ne sait pas afficher les float, ils sont converti en implicitement en double avant d'être affiché.

                        La norme dit %f pour un double, le spécificateur l est sans effet dans ce cas, donc on peut le mettre ou pas.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        ...

                        Problème convertisseur euros-francs

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown