Probleme avec switch

Résolu
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006 - 19 févr. 2006 à 00:55
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006 - 19 févr. 2006 à 23:19
Bonjour à tous

Je suis debutant en c++.Je viens de fabrique un petit prog pour choisir entre la convertion des euros en francs ou des francs en euros mais quand je compile, mon compilateur s'arrete sur la ligne ou il y a endl;

#include <cstdio>
#include <cstdlib>
#include
using namespace std;

int main()
{
int c, c2, exit;
float euros, francs;

printf("convertir");
printf("\n\n 1 - les euros en francs");
printf("\n 2 - les francs en euros");
printf("\n 3 - les euros en francs");
printf("\n\n\t Choix:\t");
scanf("%d", &c);

switch(c)
{
case 1:
printf("\n\n entrer la somme en euros");
scanf("%f", &euros);
printf("la valeur en francs est est: %f", francs=euros * 6.55957, francs);
endl:
return main();
}
break;


switch(c2)
{
case 2:
printf("\n\n entrer la somme en francs");
scanf("%f", &francs);
printf("la valeur en euros est est: %f", euros=francs/6.55957, euros);
endl;
return main();
}

break;

case 3:
printf("\n\nAppuyez sur un touche pour continuer...\n");
scanf("%d", &exit);
break;

default:
printf("\n\n Choix non valide\n\n\n");
return main();
}

return 0;
}

Au debut j'avais utiliser cin et cout pout mon prog mais ont m'a dit que printf etait mieux.La je suis un peut perdu en plus il y a des "signesé que je ne comprend pas trop comme %f.Normalent % c'est pas modulo?

Merci d'avance pour votre aide.

18 réponses

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
19 févr. 2006 à 14:28
c'est ça !!

voila le même programme avec une conversion en plus (un cas en plus) :

Et comme les martiens sont un peu tatillons sur leur monnaie, on est
obligé de convertir avec 5 chiffres après la virgule (d'où le %.5f dans
le cas 3)

Et tu n'a pas besoin de déclarer une nouvelle variable (donner un nom a
float) pour faire fonctionner le programme, il suffit de rajouter un
cas de traitement dans la boucle switch (il a fallu decaler la valeur
de sortie Reponse = 4 pour inserer le traitement de la nouvelle
conversion)





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



int Reponse = 0;

float euros, francs;



while (Reponse != 4) {



printf("convertir");

printf("\n\n 1 - les euros en francs");

printf("\n 2 - les francs en euros");

printf("\n 3 - les francs en ecus martiens");

printf("\n 4 - quitter");

printf("\n\n\t Choix:\t");

scanf("%d", &Reponse);



switch(Reponse) {



case 1:

printf("\n\n entrer la somme en euros : ");

scanf("%f", &euros);


printf("la valeur en francs de %f euros est : %.2f
francs\n", euros, euros * 6.55957);

break;





case 2:

printf("\n\n entrer la somme en francs : ");

scanf("%f", &francs);


printf("la valeur en euros de %f francs est : %.2f
euros\n", francs, francs/6.55957);

break;



case 3:

printf("\n\n entrer la somme en francs : ");

scanf("%f", &francs);


printf("la valeur en ecus martiens de %f francs est
: %.5f ecus martiens\n", francs, francs*194.23456);

break;



case 4:

printf("Au revoir\n");

return (0);

break;



default:

break;

}

}

}
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 7
19 févr. 2006 à 01:25
tout dabord le switch :

switch(val) {
case X :
//instructions
break;
case ...
default :
//instr2
}

equivaut a :
if (val == X) {
//instructions
} else if (val == ...) {
}else {
//instr2
}

ensuite,
printf(motif, vars, ...)
remplace les % du motif par les vars. si par exemple tu as 2 "%d" dans ton motif, il faudra que tu mette 2 int dans les vars (printf("var1=%d et var2=%d\n", var1, var2); ou var1 et var2 sont des int).

enfin le "return main()" n'est pas bien, ton programme fera des appels recursifs qui ne sont pas necessaires dans ton cas (couts supplementaires). remplace par un while qui sarrete quand tu rentre la valeur d'arret.

ton prog donnerai ca:

int main()
{
int c, exit, arret;
float euros, francs;

arret=0;
while( ! arret) {
printf("convertir");
printf("\n\n 1 - les euros en francs");
printf("\n 2 - les francs en euros");
printf("\n 3 - quitter");
printf("\n\n\t Choix:\t");
scanf("%d", &c);

switch(c)
{
case 1:
printf("\n\n entrer la somme en euros");
scanf("%f", &euros);
francs=euros * 6.55957;
printf("la valeur en francs est est: %f\n", francs);
break;
case 2:
printf("\n\n entrer la somme en francs");
scanf("%f", &francs);
euros=francs/6.55957;
printf("la valeur en euros est est: %f\n", euros);
break;
case 3:
printf("\n\nAppuyez sur un touche pour continuer...\n");
scanf("%d", &exit);
arret = 1;
break;
default:
printf("\n\n Choix non valide\n\n\n");
}
return 0;
}
}
0
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006
19 févr. 2006 à 01:26
C'est parce que tu as mis "endl:" au lieu de "endl;" Sinon je sais pas qui t'as dit ca mais cin et cout sont mieux que printf qui est une fonction du C "deprecated". A ta place j'utiliserais cout et cin... enfin ca n'est pas très important. Sinon % c'est bien le modulo mais %f indique au programme qu'on attend un flottant, c'est à admettre :)
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
19 févr. 2006 à 01:53
Une autre solution :

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



int Reponse = 0;

float euros, francs;



while (Reponse != 3) {



printf("convertir");

printf("\n\n 1 - les euros en francs");

printf("\n 2 - les francs en euros");

printf("\n 3 - quitter");

printf("\n\n\t Choix:\t");

scanf("%d", &Reponse);



switch(Reponse) {



case 1:

printf("\n\n entrer la somme en euros : ");

scanf("%f", &euros);


printf("la valeur en francs de %f euros est : %.2f
francs\n", euros, euros * 6.55957);

break;





case 2:

printf("\n\n entrer la somme en francs : ");

scanf("%f", &francs);


printf("la valeur en euros de %f francs est : %.2f
euros\n", francs, francs/6.55957);

break;



case 3:

printf("Au revoir\n");

return (0);

break;



default:

break;

}

}

}



Les %f et %d sont appelées des chaines de format. C'est une
syntaxe utilisé avec les fonctions de la famille printf (sprintf,
vprintf...) pour permettre une mise en forme plus précise des sorties.
ainsi %f indique qu'il faut imprimer un chiffre à virgule dans le
format par défaut (5 ou 6 chiffres après la virgule mais ça dépend.),
tandis que %.2f indique qu'il faut afficher uniquement 2 chiffres après
la virgule (c'est plus joli pour des valeurs monétaires). Par contre si
tu avais voulu imprimer un résultat de type scientifique, tu aurais pu
écrire %.6f, ce qui induerait un résultat avec 6 chiffre après la
virgule. Il existe pleins de possibilités dans l'utilisation des
chaines de format et une bonne lecture d'un bon livre de C t'en
apprendra beaucoup plus.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 12:28
Merci à vous je viens de tester et sa marche nickel, j'ai enfin compri à quoi serve %.Si j'ai bien compri pour ajouter par exemple une nouvelle monnaie j'aurais à ajouter un nom a flaot, une ligne avec printf et ajouter une case?
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 16:36
ok merci beaucoup pour l'aide.
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 19:51
Désoler c'est encore moi.

Je voudrais juste savoir si il etait possible d'ajouter des graphismes simple dans mon programme juste histoire d'avoir un peut de forme.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 7
19 févr. 2006 à 19:58
printf("************** convertir ****************\n");

printf("* 1 - les euros en
francs
*\n");

printf("* 2 - les francs en
euros
*\n");

printf("* 3 - les francs en ecus martiens *\n");

printf("* 4 -
quitter
*\n");

printf("****************************************\n");

printf("\n\t Choix:\t");



c'est le plus simple si tu veu pas te faire chi**
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 20:20
Merci pour ta reponse c'est deja mieux.

Je voudrais juste savoir si il etait prématuré pour moi de faire des graphisme
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 20:22
avec la librairie wxWidgets ou avec d'autres librairie graphique?

Merci d'avance

p.s:désoler pour la reponse en deux parties j'ai appuyé sur entrer sans faire expret lol.
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
19 févr. 2006 à 21:06
Les widgets et les trucs qui clignotent, c'est pour faire beau, c'est du cosmétique...

Un programme est utile s'il fonctionne avec le moins d'erreurs
possibles. S'il est beau ton programme mais qu'il convertit les euros
en dollar quand tu lui demande des francs, les widgets ça ne sert à
rien...

Le mieux c'est de bien commencer par comprendre la puissance du langage
C et des mécanismes qu'il permet de mettre en oeuvre. Le graphisme
c'est la cerise sur le gateau.
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 21:27
Merci pour ta reponse.C'est vrai que je prefere mieux, avant de me lancer dans dans les graphismes, comprendre et bien maitriser le c++(il y a de quoi faire).Je vais encore etre embetant mais avez-vous des idées pour que je puisse m'excercer sur des chapitres tel que les surcharges, les pointeurs ou encore des constructeurs?
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
19 févr. 2006 à 21:52
Le langage C++ est un sur ensemble du langage C. Il est né de la mode
des langages objet, mais ce n'en est pas vraiment un. Si tu veux
maitriser le C++, tu dois d'abord maitriser le langage C, qui lui est
un langage procédural. Le meilleur livre que je connaisse sur le
langage C est à mon avis encore un des plus lus, c'est le livre écrit
par ses concepteurs. "Introduction au langage C" de D. Ritchie et BW
Kernighan. Il est un peu dur à la lecture, mais la richesse des ses
exercices font vraiment aller au fond du langage (expressions,
fonctions, pointeurs...). Si tu lis ce livre, et que tu réalises une
bonne partie de ses exercices, tu pourras réellement entamer le C++
(Classes, méthodes, surcharges...). Parce que pour l'instant, ce que
nous avons fait sur ce fil c'est juste un programme en C. Il n'y a pas
de C++ dedans... Pour le C++ je ne connais aucun livre bien, je te
déconseille celui de son concepteur (B. Stroustrup), sauf si tu sens
l'âme d'un théoricien en informatique.
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 22:18
j'ai appri les base du c++ avec un livre qui s'appele le c++ pour le nul(comme moi lol)qui est vraiment pas mal pour les debutant avec des exemples telechargeables.Sinon on m'a preté plusieurs bouquin que se soit sur le c++ ou le c.Je vais te citer les noms.Mode d'emploie c(bruce hunter), le language c 2eme edition(de b.w kernighan et de d.m ritchie) et atelier visual c++(david kruglinski).Pour l'instant je n'ai lu que le c++ pour les nuls.Les autres livres qu'on ma passer vienne d'une amie qui a fait un dut info mais qui sont a mon avis reservé un peut plus pour les pro.Je sais pas si sa vaut le coup de lire si c'est pour me perdre dans une masse d'information.Et ont m'a dit que si on apprenait le c avant le c++ on pouvait acquerir de mauvaises habitudes donc c'est pour cela que j'ai direct commencer par le c++.

Je sais pas ce que t'en pense.A toi de me guider dans le droit chemin de la programmation lol.
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
19 févr. 2006 à 22:45
Le language c 2eme edition(de b.w kernighan et de d.m ritchie). Le seul à lire mais surtout à comprendre.



Quand à ceux qui te disent que comprendre le C c'est une mauvaise
habitude, il faut que tu saches que la plupart des programmeurs C++
font du procedural en croyant faire de l'objet (ils font du c dans un
environnement de travail c++, ou encore ils font du c en mettant
"class" devant).

Dans un programme C++, tout ce qui fait la puissance d'expression,
appartient au langage C (expressions ternaire, expressions régulières,
raccourcis de langage, pointeurs, chaines de format...).

Bien sur tu peux apprendre la langage c++ sans vraiment comprendre le
langage c. Le C++ apporte les notions de classes et de methodes. Mais
les tournures de langages principales du C++ sont en fait du C. A mon
avis sauter des étapes, c'est moyen.



A toi de voir.
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 22:50
je pense que je vais le lire si il est si bien que ça.De toute façon sa peut que me faire du bien.Et pour les autre livres t'en pense quoi?
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
19 févr. 2006 à 23:03
connais pas...

Juste pour la petite histoire, le langage c est né du langage b... On
peut dire que, côté littérature, les informaticiens n'ont pas beaucoup
d'imagination...
0
Oruk Messages postés 28 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 19 février 2006
19 févr. 2006 à 23:19
language b?? connai pas celui la lol.Apres sa serait peut etre le language d lol.

Merci en tout cas pour tes conseils AlexN.
0