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

  FORUM HardWare.fr
  Programmation
  C

  [C] [Debutant] Petit problème avec un programme tout bete

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] [Debutant] Petit problème avec un programme tout bete

n°1357633
Max2000
Posté le 02-05-2006 à 11:11:55  profilanswer
 

Tout dabord salut :hello:
 
Alors je me suis mis très récement au C (depuis hier) et je suis activement le tuto sur le site du zéro, et j'ai voulu faire un petit programme en C qui convertis des Euros en Francs et vice versa :D
 
Le problème c'est qu'il ne marche pas [:matleflou]
 
Voici mon code :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char *argv[])
  4. {
  5.   // Definition des variables et constantes
  6.   const double DEVISE = 6.55957;
  7.   long action;
  8.   double francs, euros;
  9.  
  10.   // Affichage du menu pour l'action à effectuer
  11.   printf("=== Menu ===\n\n" );
  12.   printf("1. Convertir des Euros en Francs\n" );
  13.   printf("2. Convertir des Francs en Euros\n" );
  14.  
  15.   printf("\n" );
  16.  
  17.   printf("Que voulez-vous faire ? " );
  18.   scanf("%ld", &action);
  19.  
  20.   system("cls" );
  21.  
  22.   double convertef(euros)
  23.   {
  24.          return euros * DEVISE;
  25.   }
  26.  
  27.   double convertfe(francs)
  28.   {
  29.          return francs / DEVISE;
  30.   }
  31.   switch (action)
  32.   {
  33.          case 1:
  34.               printf("Combien d'Euros voulez-vous convertir en Francs ? " );
  35.               scanf("%lf", &euros);
  36.               system("cls" );
  37.               printf("Alors, %lf Euros ca fait %lf Francs\n\n", euros, convertef(euros));
  38.               break;
  39.          case 2:
  40.               printf("Combien de Francs voulez-vous convertir en Euros ? " );
  41.               scanf("%lf", &francs);
  42.               system("cls" );
  43.               printf("Alors, %lf Francs ca fait %lf Euros\n\n", francs, convertfe(francs));
  44.               break;
  45.          default:
  46.                  exit(0);
  47.                  break;
  48.   }
  49.   system("PAUSE" );
  50.   return 0;
  51. }


 
Quand par exemple je veux convertir 100 Francs en Euros je tappe donc 2 pour faire l'action 2, et ensuite 100 pour dire que je veux convertir 100 Francs, et il me sort que ça fait 0 € :o
 
Ya comme un bug :p Vous pouvez m'aider ?
 
Merci d'avance :jap:
 
Edit : Tiens ya un jocebug avec l'affichage du code :o
Et je tiens à preciser que si je passe tout avec des "long" ça marche... Mais je veux garder des "double" pour pouvoir utiliser des nombres décimaux moi :/

Message cité 2 fois
Message édité par Max2000 le 02-05-2006 à 11:15:38
mood
Publicité
Posté le 02-05-2006 à 11:11:55  profilanswer
 

n°1357637
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 11:25:48  profilanswer
 

Max2000 a écrit :

Voici mon code :


Il y a quelques problèmes dans ce code...


Compiling: main.c
main.c: In function `main_':
main.c:24: warning: function declaration isn't a prototype
main.c: In function `convertef':
main.c:24: warning: declaration of 'euros' shadows a previous local
main.c:9: warning: shadowed declaration is here
main.c: In function `main_':
main.c:29: warning: function declaration isn't a prototype
main.c: In function `convertfe':
main.c:29: warning: declaration of 'francs' shadows a previous local
main.c:9: warning: shadowed declaration is here
main.c:54:2: warning: no newline at end of file
main.c: In function `main_':
main.c:52: warning: will never be executed
Linking console executable: D:\dev\ed02\cb\ed02.exe
Process terminated with status 0 (0 minutes, 4 seconds)
0 errors, 8 warnings


A lire :  
 
http://mapage.noos.fr/emdel/notes.htm#portee
Notamment : Objets / Shadowing
 

  • Il n'est pas permi de définir des fonctions dans des fonctions en C standard.
  • Il faut préciser le type des paramètres, sinon, c'est int
  • Pour DEVISE, un constante globale suffit (macro)...


Message édité par Emmanuel Delahaye le 02-05-2006 à 11:37:55

---------------
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/
n°1357643
Max2000
Posté le 02-05-2006 à 11:29:58  profilanswer
 

Moi je n'ai aucune erreurs ni warning lors de la compilation :??:

n°1357646
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 11:32:20  profilanswer
 

Max2000 a écrit :

Moi je n'ai aucune erreurs ni warning lors de la compilation :??:


Ben oui. La première chose à faire, c'est d'apprendre à regler son compilateur en mode paranoïd ... Quel est-il ?


Message édité par Emmanuel Delahaye le 02-05-2006 à 11:33:17

---------------
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/
n°1357648
Max2000
Posté le 02-05-2006 à 11:33:33  profilanswer
 

J'utilise Dev C++ comme IDE donc je crois que c'est GCC mon compilateur :??:
 
Mais je crois que je viens de trouver mon erreur en fait :p
 
Ah non, fausse alerte, ça marche pas :(
 
Mes fonctions convertef() et convertfe() doivent être obligatoirement à l'exterieur du main() ? Pasque j'ai essayé en les mettant dehors, et ça ne marche pas non plus :/

Message cité 2 fois
Message édité par Max2000 le 02-05-2006 à 11:39:15
n°1357658
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 11:39:55  profilanswer
 

Max2000 a écrit :

J'utilise DevC++ comme IDE donc je crois que c'est GCC mon compilateur :??:


Alors je te conseille de le configurer pour qu'il ajoute ceci à la ligne de commade de gcc (ici MinGW, mais peu importe)

- Wall -Wextra -O2 -ansi -pedantic


Ca fera le ménage...


Message édité par Emmanuel Delahaye le 02-05-2006 à 11:41:29

---------------
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/
n°1357660
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 11:41:06  profilanswer
 

Max2000 a écrit :

Mes fonctions convertef() et convertfe() doivent être obligatoirement à l'exterieur du main() ?


Oui. Et placées avant, c'est plus simple.

Citation :

Pasque j'ai essayé en les mettant dehors, et ça ne marche pas non plus :/


"ça ne marche pas" c'est vague... Mais il faut lire toutes mes remarques, notamment concernant les paramètres...


Message édité par Emmanuel Delahaye le 02-05-2006 à 11:43:13

---------------
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/
n°1357661
Sve@r
Posté le 02-05-2006 à 11:41:24  profilanswer
 

Max2000 a écrit :

Code :
  1. double convertef(euros)
  2.   {
  3.          return euros * DEVISE;
  4.   }
  5.  
  6.   double convertfe(francs)
  7.   {
  8.          return francs / DEVISE;
  9.   }




 
Une variable non typée est mis à "int" par défaut => tes fonctions reçoivent des double qu'elles transforment en "int"  
 

Code :
  1. double convertef(double euros)
  2.   {
  3.          return euros * DEVISE;
  4.   }
  5.  
  6.   double convertfe(double francs)
  7.   {
  8.          return francs / DEVISE;
  9.   }


 
Et comme l'a dit Emmanuel, sors ces fonctions du "main()". Et remplace la variable "DEVISE" par une macro "DEVISE" (ou alors tu remplaces "DEVISE" par "devise" et tu passes "devise" en 2° paramètre à tes fonctions).
Et prend l'habitude de considérer qu'un identificateur écrit totalement en majuscule est conventionnellement une macro (les variables sont écrites généralement en minuscules avec parfois des majuscules pour identifier les mots => nbCarFic par exemple)


Message édité par Sve@r le 02-05-2006 à 11:42:41

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357669
Max2000
Posté le 02-05-2006 à 11:48:33  profilanswer
 

Ca marche désormais, merci à vous :)
 
Mais je voulais savoir quelle était la différence entre une macro et une constante ? Dans le chapitre où j'en suis on ne parle pas encore de macro, seulement de constantes et de variables...

n°1357682
Sve@r
Posté le 02-05-2006 à 11:55:19  profilanswer
 

Max2000 a écrit :

Ca marche désormais, merci à vous :)
 
Mais je voulais savoir quelle était la différence entre une macro et une constante ? Dans le chapitre où j'en suis on ne parle pas encore de macro, seulement de constantes et de variables...


 
Une macro est une directive de précompilation
Lors de cette précompilation, le compilo génère un source où toutes les macro sont remplacées par leur correspondance littérale et c'est ce source qui est compilé
avantages:
=> pas de variable donc pas de mémoire pour une macro
=> si la valeur correspondante change, tu ne fais qu'une seule modif et tu recompiles
inconvénients:
=> danger inhérents au remplacement littéral et à la priorité des opérateurs
#define CARRE(x)     x * x
=> Tu demandes "CARRE(2 + 3)" => tu obtiens 2 + 3 * 2 + 3 soit 11 au lieu de 25
=> tu demandes "CARRE(i++)" => tu as "i++ * i++" soit i incrémenté de 2 au lieu de 1


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 02-05-2006 à 11:55:19  profilanswer
 

n°1357725
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 13:06:00  profilanswer
 

Max2000 a écrit :

Ca marche désormais, merci à vous :)
 
Mais je voulais savoir quelle était la différence entre une macro et une constante ? Dans le chapitre où j'en suis on ne parle pas encore de macro, seulement de constantes et de variables...


  • Une macro est un mécanisme qui remplace du texte par un autre texte.
  • Il n'y  pas de 'constantes' mais des 'expressions constantes'. Une expression constante est une valeur évaluée à la compilation. Ce n'est pas un objet, elle a un type mais pas d'adresse.
  • Une variable ou objet peut contenir différentes valeurs. Elle a un type et une adresse.
Code :
  1. int const a = 123;


est un objet nommé a de type int, valeur 123 non modfiable (accès en lecture seule). Son adresse est &a. Ce n'est donc pas une expression constante.
 
 
 


---------------
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/

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

  [C] [Debutant] Petit problème avec un programme tout bete

 

Sujets relatifs
[PHP/Active Directory] Problème d'accès au groupe AD avec PHPproblème d'insertion ds une base de donnée depuis un site...
Probleme Database paradox[Débutant] C avec GTK+/GNOME
Problème accentuationPetit Problème matlab tout bête
Problème de page de confirmationProbleme de largeur de <td> sous IE
Plus de sujets relatifs à : [C] [Debutant] Petit problème avec un programme tout bete


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