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....
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.
Le Tout est souvent plus grand que la somme de ses parties.
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 !
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)
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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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...)
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.
...
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.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.