CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Amélioration du code source.

Gexou
Gexou
Niveau 3
29 mars 2007 à 20:40:59

Salut, j´ai fait un petit programme tout simple en C avec Xcode, mais je le trouve pas très joli.
Quelqu´un pourrait-il me donner quelques conseils pour l´améliorer?

Merci.

Voici le code :

  1. include <stdio.h>
  2. include <stdlib.h>

double conversion(double euros)
{
double francs = 0;

francs = 6.55957 * euros;
return francs;
}

double conversionn(double francs)

{
double euros = 0;
euros = francs / 6.55957;
return euros;
}

int main(int argc, char *argv[])
{

long euros = 0, choix1 = 0, choix2 = 0, francs = 0;
debut:

printf("Dans quel sens voulez vous effectuer votre conversion?\n");
printf("1. Euros => Francs\n");
printf("2. Francs => Euros?\n");
scanf("%ld", &choix1);

switch (choix1)
{
case 1 :

goto EF;

break;

case 2 :

goto FE;

break;
}
EF :
printf("Entrez votre somme en euros\n");
scanf("%ld", &euros);
printf("%ld euros valent %lfF\n\n", euros, conversion(euros));

goto RE;

FE :
printf("Entrez votre somme en francs\n");
scanf("%ld", &francs);
printf("%ld euros valent %lf€\n\n", francs, conversionn(francs));

do
{

RE:

printf("Une autre conversion?\n\n");
printf("1. Oui\n");
printf("2. Non\n");
scanf("%ld", &choix2);

}
while (choix2 > 2);

switch (choix2)
{

case 1:

goto debut;

break;

case 2:

return 0;

break;
}
return 0;
}

godrik
godrik
Niveau 30
29 mars 2007 à 21:31:05

plusieurs choses.
La premiere on evite de mettre plusieurs la meme constante (qui represente la meme chose j´entends) dans le meme code.
On preferera ecrire:

float taux_conversion = 6.55947;

double conversion(double euros)
{
double francs = 0;

francs = taux_conversion * euros;
return francs;
}

double conversionn(double francs)

{
double euros = 0;
euros = francs / taux_conversion;
return euros;
}

ainsi, si jamais tu avais besoin de changer cette valeur, augmenter la precision... tu n´aurais besoin de changer la valeur qu´a un seul endroit du code.

ensuite globalement on utilise pas de goto dans les langages evolué. on ne les utilise sous (quasiment) AUCUN pretexte. C´est le mal incarné, le diable qui vient te manger, le pere noel qui meurt...

On préfère des boucles. pour ce que tu cherche a faire, on fera ainsi

int cont = 1;

while (cont)
{
//do something
//demander le choix a l´utilisateur
if (valeur == 1)
cont = 0;
}

c´est beaucoup plus simple a lire comme cela.

De plus, tu pourrais exporter le traitement de ton menu dans des fonctions séparer. Ainsi ton code serait plus lisible.

Gexou
Gexou
Niveau 3
29 mars 2007 à 21:41:52

Ok merci pour tout.

"De plus, tu pourrais exporter le traitement de ton menu dans des fonctions séparer. Ainsi ton code serait plus lisible."

Ça signifie que je crée un nouveau fichier.c et que je rentre mes fonctions dans ce fichier puis je le met en include dans mon fichier principal.Est-ce bien cela?

LiquidiusSnake
LiquidiusSnake
Niveau 5
29 mars 2007 à 21:53:00

Voilà ton code légèrement retouché et racourci, ce n´ est pas le code parfait, loin de là, mais c´ est juste une façon différente de coder, qui me semble plus simple.

  1. include <stdio.h>
  2. include <stdlib.h>

double conversionn(double francs);
double conversion(double euros);
/* Pense à mettre les prototypes de tes fonctions dans ton code et tes fonctions
à la fin de ton code, cela améliore la clareté.*/

int main(int argc, char *argv[])
{

long euros = 0, choix1 = 0, choix2 = 1, francs = 0;

/* la boucle do... while permet de supprimer tes goto qui rallongent ton code,
elle englobe la quasi-totalité du code pour demander à l´ utilisateur s´ il veut
faire ou non une autre conversion.*/

do
{
printf("Dans quel sens voulez vous effectuer votre conversion?\n");
printf("1. Euros => Francs\n");
printf("2. Francs => Euros?\n");
scanf("%ld", &choix1);

switch (choix1)
{
case 1 :

printf("Entrez votre somme en euros\n");
scanf("%ld", &euros);
printf("%ld euros valent %lfF\n\n", euros, conversion(euros));

break;

case 2 :

printf("Entrez votre somme en francs\n");
scanf("%ld", &francs);
printf("%ld euros valent %lfE\n\n", francs, conversionn(francs));
break;
}

printf("Voulez vous effectuer une autre conversion?\n\n");
printf("1. Oui\n");
printf("0. Non\n");
scanf("%ld", &choix2);

}while(choix2);

return 0;
}

double conversion(double euros)
{
double francs = 0;

francs = 6.55957 * euros;
return francs;
}

double conversionn(double francs)

{
double euros = 0;
euros = francs / 6.55957;
return euros;
}

Gexou
Gexou
Niveau 3
30 mars 2007 à 20:25:15

Ok merci bien.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment