Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2267 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probleme sur petit programme de débutant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme sur petit programme de débutant

n°1398622
samos38
A soif d'apprendre :P
Posté le 01-07-2006 à 19:05:15  profilanswer
 

Bonjour  :)  
 
Alors voila j'essaye de faire un convertisseur euros <==> francs
Je fais afin de m'entrainer sur les fonctions :
 
J'ai créer 2 fonctions en plus de la main afin de convertir dans les 2 sens mais mon programme ne marche pas !
 
Voici le code :
 

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.                      
  4. double francs=0,euros=0; //On déclare toutes les variables avant
  5. double euro ( double francs ) // cette fonction tranforme les francs en euros
  6.        {
  7.        euros = francs*6.55957 ;
  8.        return euros ;
  9.        }
  10. double franc ( double euros )// cette fonction tranforme les euros en francs
  11.        { 
  12.        francs = euros/6.55957 ;
  13.        return francs ;   
  14.        }   
  15. int main (int argc, char *argv[])
  16.     {
  17.        
  18.    
  19.     printf("                      === CoNvErTiSeUr ===                 By S@MoS \n\n                      FrAnCs  <===> EuRoS \n\n" );
  20.    
  21.     printf("1.  Francs --> Euros \n\n2.  Euros  --> Francs \n\n\n            ?" );
  22.    
  23.     long choix=0,resultat=0;
  24.    
  25.     scanf("%ld",&choix);
  26.    
  27.     if (choix == 1 )
  28.             {
  29.             printf("Entrer la somme a convertir en Francs : " );
  30.             scanf("%lf",&francs);
  31.             printf(" %lf Francs = %lf Euros",francs,franc(euros));
  32.             }
  33.    
  34.     else (choix == 2);
  35.             {
  36.             printf("Entrer la somme a convertir en Francs : " );   
  37.             scanf("%lf",&euros);
  38.             printf(" %lf Euros = %lf Francs",euros,euro(francs));               
  39.             }
  40.    
  41.    
  42.     system("PAUSE" );
  43.     return 0;
  44.    
  45.     }


 
A la fin ca me met :
 
0.00000 Euros = 0.0000 Francs
 
De plus la boucle    if (choix == 1 ) tourne en boucle et ne veut pas s'arrete avec le return 0 ;
 
Merci d'avance pour votre aide
 


---------------
débute en C
mood
Publicité
Posté le 01-07-2006 à 19:05:15  profilanswer
 

n°1398626
GroXx
Posté le 01-07-2006 à 19:32:06  profilanswer
 

Salut samos :)
 
Bah déjà, perso, j'évite de mettre des variables globales. A moins que tu n'aie des constantes à déclarer ca fait pas super propre.
Ensuite, ce truc:

Code :
  1. else (choix == 2);

cay très mal. soit tu met juste

Code :
  1. else

, soit

Code :
  1. else if (choix == 2)


Là ton else, il exécute la commande qui a juste après cad choix == 2. D'ailleurs t'as mis un ";" pour pouvoir compiler je suppose...
 
Sinon, autre truc, j'aurais utilisé un getchar() pour faire le choix, vu que tu n'as besoin que d'un caractère. Dans ce cas, tu dois déclarer ta variable choix comme caractère.
Dans tes fonctions, ca renvoie des doubles. faut renvoyer des float si tu veux avoir de la précision. Pareil pour le parametre, si tu veux convertir 12fr50centimes.
Et, pas besoin de mettre du double de partout, ca bouffe quand même en mémoire. du int suffit généralement amplement.
Donc de manière générale, gaffe à tes variables
 
Bonne prog  ;)


Message édité par GroXx le 01-07-2006 à 19:39:04
n°1398628
samos38
A soif d'apprendre :P
Posté le 01-07-2006 à 20:02:44  profilanswer
 

Merci de tes précisions  
 
j'ai procédé aux modifications que tu m'as di sauf des variables générales parce que si je ne les met pas au début ca me met que je ne les ai pas déclarer ...
 
Mais le programme ne marche toujours pas
 
ca me met toujours 0000 francs = 0000 euros
 
De plus je n'ai pas compris pour le getchar() je ne connais pas cette commande  
 
Si vous pouviez détaillez ca m'aider parce que la j'ai vraiment du mal
 
Merci d'avance  :)


---------------
débute en C
n°1398631
Sve@r
Posté le 01-07-2006 à 20:33:59  profilanswer
 

samos38 a écrit :

j'ai procédé aux modifications que tu m'as di sauf des variables générales parce que si je ne les met pas au début ca me met que je ne les ai pas déclarer ...


Tu les mets dans ton main() !!!
 

samos38 a écrit :

De plus je n'ai pas compris pour le getchar() je ne connais pas cette commande


C'est une fonction qui récupère un seul caractère du clavier
 

samos38 a écrit :

Si vous pouviez détaillez ca m'aider parce que la j'ai vraiment du mal


Ok - Je rectifie un peu ton source (cela n'enfreint pas les règles du forum puisque le source est déjà écrit)


#include <stdio.h>
#include <stdlib.h>      
 
// Déjà, c'est bien de donner des noms plus explicites aux fonctions
double franc2euro ( double francs ) // cette fonction tranforme les francs en euros (lire "franc to euro" )
{
      double calcul;    // Variable locale à la fonction
                 
       calcul=francs*6.55957 ;
       return calcul ;
}
 
double euro2franc ( double euros )// cette fonction tranforme les euros en francs (lire "euro to franc" )
{
      double calcul;    // Variable locale à la fonction
                 
       calcul=euros/6.55957 ;
       return calcul;
}
 
int main (int argc, char *argv[])
{
    double monnaie;        // une seule variable suffit puisque le programme n'en n'utilise qu'une seule pour le calcul !!!
    long choix;
         
    printf("                      === CoNvErTiSeUr ===                 By S@MoS \n\n                      FrAnCs  <===> EuRoS \n\n" );
     
    printf("1.  Francs --> Euros \n\n2.  Euros  --> Francs \n\n\n            ?" );
     
    scanf("%ld", &choix);
 
    switch (choix)
    {
         case 1: // Francs vers euros
             printf("Entrer la somme a convertir en Francs : " );
             scanf("%lf",&monnaie);  
             printf(" %lf Francs = %lf Euros", monnaie, franc2euro(monnaie));
             break;
         case 2: // Euros vers francs
             printf("Entrer la somme a convertir en Euros : " );      
             scanf("%lf",&monnaie);  
             printf(" %lf Euros = %lf Francs", monnaie ,euro2franc(monnaie));                
             break;
     }
     
 
     system("PAUSE" );
     return 0;
     
}


Bon, j'ai pas testé mais cela devrait être pas mal. Essaye de regarder les principes de ce programme.
1) jamais de variable globale => cela engendre de la confusion dans la lecture et ouvre la porte aux bugs (n'importe quelle fonction peut modifier une globale)
2) utiliser des noms de fonctions significatifs et éviter dans la mesure du possible des noms de fonctions (comme "euro" ) similaire aux noms de variables (comme "euros" ) => bonjour l'angoisse de la relecture !!!
3) essayer de regrouper différentes variables ayant une utilité similaire et utilisées alternativement en une seule variable plus "générale" => "euros" et "francs" sont devenues "monnaie" (aurait pu aussi s'appeler "somme" )
 

samos38 a écrit :

De plus la boucle    if (choix == 1 );


[:heink] Ne reparle jamais de "boucle if" !!!
 

samos38 a écrit :

tourne en boucle et ne veut pas s'arrete avec le return 0


Ce comportement est typique d'un "scanf" mal utilisé. Cette fonction est très rigoureuse et attend des entrées "formattées" (c'est à dire bien écrites). Si tu entres un truc qui n'est pas comme il faut, "choix" contient n'importe quoi. En général, pour une saisie manuelle, il vaut mieux éviter "scanf" et utiliser d'autres fonctions comme "getchar()" ou "fgets()".


Message édité par Sve@r le 01-07-2006 à 20:39:07

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1398643
samos38
A soif d'apprendre :P
Posté le 01-07-2006 à 21:03:38  profilanswer
 

Ok j'ai compris l'accumulation des choses qui on fait que j'était perdu :P
 
Par contre pour l'utilisation de "getchar()" ou "fgets()" je ne connais pas la synthaxe qu'il faut utiliser :
 
Est ce possible de me l'expliquer , promis c'est la derniere question :P
 
Merci beaucoup pour votre aide


---------------
débute en C
n°1398645
Sve@r
Posté le 01-07-2006 à 21:18:21  profilanswer
 

samos38 a écrit :

Ok j'ai compris l'accumulation des choses qui on fait que j'était perdu :P
 
Par contre pour l'utilisation de "getchar()" ou "fgets()" je ne connais pas la synthaxe qu'il faut utiliser :
 
[quotemsg=1398643,5,337283]promis c'est la derniere question :P


T'as tord ! Quand j'ai appris le C, j'arrétais pas de poser des questions !!!
 

samos38 a écrit :

Ok j'ai compris l'accumulation des choses qui on fait que j'était perdu :P
 
Par contre pour l'utilisation de "getchar()" ou "fgets()" je ne connais pas la synthaxe qu'il faut utiliser :


 
getchar:

#include <stdio.h>
char carac;
carac=getchar();
printf("carac=[%c]\n", carac);


 
fgets:

#include <stdio.h>
char saisie[1000 + 1];
fgets(saisie, 1000 + 1, stdin);
printf("saisie=[%s]\n", saisie);


 
Si tu trouves étrange ce "1000 + 1", c'est une habitude des programmeurs C. Ils montrent ainsi qu'ils ont bien pris en compte le caractère '\0' qui sera rajouté automatiquement par la fonction "fgets" (et toutes les autres fonctions de remplissage de chaîne).
Et le "1000 + 1" dans "fgets" parce que "fgets" s'arrête à "N - 1" quand on lui demande "N" (pour garder justement la place pour ce fameux '\0')

Message cité 1 fois
Message édité par Sve@r le 01-07-2006 à 21:18:40

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1398648
samos38
A soif d'apprendre :P
Posté le 01-07-2006 à 21:37:20  profilanswer
 

Ok merci beaucoup pour votre aide je vais travailler tout ca et je vais sans doute  revenir vous voir  ;)


---------------
débute en C
n°1403168
big_dadi_f​at
Posté le 09-07-2006 à 10:55:53  profilanswer
 

ta invercer tes fonctions , dans l'appele.


Message édité par big_dadi_fat le 11-07-2006 à 10:52:07
n°1403169
big_dadi_f​at
Posté le 09-07-2006 à 10:56:27  profilanswer
 

ce n'est pas plutot : ?

Code :
  1. if (choix == 1 )
  2.             {
  3.             printf("Entrer la somme a convertir en Francs : " );
  4.             scanf("%lf",&francs);
  5.             printf(" %lf Francs = %lf Euros",francs,euros(francs));
  6.             }


 et l'autre fonction invercement (aussi).
 
 :sweat:  
 
babay :hello:[/quotemsg]

Message cité 1 fois
Message édité par big_dadi_fat le 11-07-2006 à 10:51:38
n°1403856
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-07-2006 à 14:41:45  profilanswer
 

big_dadi_fat a écrit :

et l'otre fonction invercement (aussi).


Tu as oublié de massacrer 'fonction' et 'aussi'...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 10-07-2006 à 14:41:45  profilanswer
 

n°1404130
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-07-2006 à 18:21:20  profilanswer
 

samos38 a écrit :


 
A la fin ca me met :
 
0.00000 Euros = 0.0000 Francs
 


et ben quoi, il marche ton convertisseur, 0 € == 0 Frs [:petrus dei]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1404446
simple_stu​pid
Keep It Simple Stupid
Posté le 11-07-2006 à 11:16:01  profilanswer
 

Sve@r a écrit :


getchar:

#include <stdio.h>
char carac;
carac=getchar();
printf("carac=[%c]\n", carac);




 
Non, non et non.
getchar() renvoie un 'int', pas un 'char'.
Ne pas utiliser 'char'.

n°1404925
Sve@r
Posté le 11-07-2006 à 19:08:05  profilanswer
 

simple_stupid a écrit :

Non, non et non.
getchar() renvoie un 'int', pas un 'char'.
Ne pas utiliser 'char'.


Boaf... le "int" n'est utile que s'il faut tester "EOF"... ;)  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probleme sur petit programme de débutant

 

Sujets relatifs
[HTML / PHP] Problème de formulaire entre 2 pagesProblème validation W3C avec Tidy validator
Problème de condition sur un COUNTProbleme pour envoyer un mail avec Excel
Problème Passage de Paramètres à une fonction Javascriptproblème de variable 2
Problème d'affichage d'imagesprobleme requete
probleme de requete sur 3 tables[C] [Debutant] Petit problème avec un programme tout bete
Plus de sujets relatifs à : Probleme sur petit programme de débutant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR