bonjour je suis debutant en C est pour m'entrainer j'ai decider de faire une calculette qui soit additionne soit soustractionne, multiplie est aussi divise.
Voila mon probleme, lorsque je veut faire une multiplication ou
une division,le programme "bug"
voici le code
int main(int argc, char *argv[])
{
int nombre1 = 0, nombre2 = 0, resultat = 0, replay = 0, choix_menu = 0, nombre1s = 0, nombre2s = 0, resultats = 0;
double nombre1m = 0.0, nombre2m = 0.0, resultatm = 0.0, nombre1d = 0.0, nombre2d = 0.0, resultatd = 0.0;
do
{
printf("\t\t\t****CALCULETTE 2.0****\n\n\n");
printf("1.ADDITION\n");
printf("2.SOUSTRACTION\n");
printf("3.MULTIPLICATION(defaillant pour le moment)\n");
printf("4.DIVISION(defaillant pour le moment)\n");
do
{
scanf("%d", &choix_menu);
if ( choix_menu < 1 || choix_menu > 4)
{
printf("Message erroné veuillez recommencer...\n\n");
}
} while ( choix_menu < 1 || choix_menu > 4);
switch ( choix_menu )
{
case 1 :
printf("Choisissez le premier nombre a additionner\n");
scanf("%d", &nombre1);
printf("Choisissez le deuxime nombre a additionner\n");
scanf("%d", &nombre2);
resultat = nombre1 + nombre2;
printf("%d + %d = %d\n\n\n", nombre1, nombre2, resultat);
break;
case 2 :
printf("Choisissez le premier nombre a soustraire\n");
scanf("%d", &nombre1s);
printf("Choisissez le deuxieme nombre a soustraire\n");
scanf("%d", &nombre2s);
resultats = nombre1s - nombre2s;
printf("%d - %d = %d", nombre1s, nombre2s, resultats);
break;
case 3 :
printf("Choisissez le premier nombre a multiplier\n");
scanf("%d", &nombre1m);
printf("Choisissez le deuxieme nombre a multiplier\n");
scanf("%d", &nombre2m);
resultatm = nombre1m * nombre2m;
printf("%d x %d = %d", nombre1m, nombre2m, resultatm);
break;
case 4 :
printf("Choisissez le premier nombre a diviser\n");
scanf("%d", &nombre1d);
printf("Choisissez le deuxieme nombre a diviser\n");
scanf("%d", &nombre2d);
resultatd = nombre1d / nombre2d;
printf("%d / %d = %d (le / veut dire diviser)\n\n\n", nombre1d, nombre2d, resultatd);
break;
}
printf("Pour refaire un calcul, entrez un nombre\n\n\n");
scanf("%d", &replay);
} while (replay = 1);
return 0;
}
Je recois aussi volontiers vos critiques pour que je progresse.(j'ai de gros doutes pour la declaration des variables la
)
ps: j'utilise le livre du site du zeros, ce livre est t'il bien?
y'a a t'il un qui serait mieu? plus expliqué? ![]()
La première chose qui m'a choquée ...Pourquoi tu déclares 2 variables nombres pour chaque cas? oO
Tu peux utiliser 2 même variables nombres à chaque fois.
Pour ton menu, préfère plutôt un do...while avec les case entre.
Eet comme condition ... Bah tu met ce que tu veux. (en général pour obliger l'utilisateur à mettre un nombre on fait "!= continuer" continuer étant une variable bool)
Il te manque aussi le case default, obligatoire.
Enfin ... Le mieux serai de revoir un peu le tout en fait ... :/
mmmm...j'ai l'impression que le site du zeros c'est un peu de la merde en faite.On t'explique un truc avec l'exemple le plus basique que l'on peut trouver et après c'est demerde toi...
Qui aurait un autre site pour aprendre le C plus pedagogiquement? ![]()
Surtout le tuto sur le C, le sdz n'est vraiment pas bon ...
Si je cherche un truc vite fait je vais sur developpez.com perso.
"On t'explique un truc avec l'exemple le plus basique que l'on peut trouver et après c'est demerde toi... "
Ça sera toujours comme ça.
C'vrai aussi; m'enfin y a moyen de mieux expliquer ou de donner quelques trucs en plus pour savoir quoi en faire.
Parce que parfois ... mon Dieu.
Pk tous ces variable ?
tu declare 3 var en double et c'est assez.
ex :
double nb1,nb2,somme; // nb1 etant le 1er produit pour ta multi et idem pour nb2
char choix; // la var pour determiner l'operation
Pour ton bug, au truc de multiplication, au scanf, tu fais un %d alors que tu lui dis que nombre1m est un int donc -> probleme
et dernier truc j'aurais fait un case of, bcp plus clair et compréhenssif ![]()
Donc tu dois faire un %lf si je me souviens bien ou %x je ne sais plus
Mais ce n'est pas %d, j'en suis sur à 90% ![]()
%lf, x c'est l'hexa.
Voir même %lg pour pas se casser la tête si tu as besoin de f ou e selon la situation ...
"Pour ton bug, au truc de multiplication, au scanf, tu fais un %d alors que tu lui dis que nombre1m est un int donc -> probleme
"
Pourquoi ça ?
%d c'est pour stocker les entier décimal signé, donc c'est adapté, nan ?
Comme tu le dis "des entiers" un double c'est 0,0. Pas considéré comme entier.
rebonjour voila j'ai fait un code beaucoup moins dégueulasse, les calculs marchent mais la boucle pour recommencer QUE si on entre 1 recommence memme quand je met autre chose que le 1. Voila le code:
int main()
{
int nombre1 = 0, nombre2 = 0, resultat = 0, choix_menu = 0, recommencer = 0;
float nombre1d = 0.0, nombre2d = 0.0, resultatd = 0.0;
do// boucle generale
{// debut boucle generale
do//boucle du menu
{//debut de la boucle du menu
printf("\t\t\tCALCULATRICE\n\n\n\n");
printf("1.ADDITION\n");
printf("2.SOUSTRACTION\n");
printf("3.MULTIPLICATION\n");
printf("4.DIVISION\n");
scanf("%d", &choix_menu);
} while ( choix_menu < 1 || choix_menu > 4);//fin de la boucle du menu
switch ( choix_menu )
{//debut du switch
case 1 :
printf("Nombre 1 a additionner...\n");
scanf("%d", &nombre1);
printf("Nombre 2 a additionner...\n");
scanf("%d", &nombre2);
resultat = nombre1 +nombre2;
printf("%d + %d = %d\n", nombre1, nombre2, resultat);
break;
case 2 :
printf("Nombre 1 a soustraire...\n");
scanf("%d", &nombre1);
printf("Nombre 2 a soustraire...\n");
scanf("%d", &nombre2);
resultat = nombre1 - nombre2;
printf("%d - %d = %d\n", nombre1, nombre2, resultat);
break;
case 3 :
printf("Nombre 1 a multiplier...\n");
scanf("%f", &nombre1d);
printf("Nombre 2 a multiplier...\n");
scanf("%f", &nombre2d);
resultatd = nombre1d * nombre2d;
printf("%f X %f = %f\n", nombre1d, nombre2d, resultatd);
break;
case 4 :
printf("Nombre 1 a diviser...\n");
scanf("%f", &nombre1d);
printf("Nombre 2 a diviser...\n");
scanf("%f", &nombre2d);
resultatd = nombre1d / nombre2d;
printf("%f diviser par %f = %f\n", nombre1d, nombre2d, resultatd);
}//fin du switch
printf("Pour refaire un calcul entrez en nombre\n\n\n");
scanf("%d", &recommencer);
} while ( recommencer = 1 );
return 0;
}
| https://www.jeuxvideo.com/forums/1-47-72574-1-0-1-0-c-probleme-calculette.htm#message_72586
| Citation de : Djidane_666
| Date du message : 28 novembre 2012 à 21:26:53
| Contenu du message :
| Comme tu le dis "des entiers" un double c'est 0,0. Pas considéré comme entier.
+> Ah nan mais il parle d'int, donc c'est un entier.
Ah nan en fait je crois qu'il c'était trompé dans sa phrase, donc j'ai mal compris, désolé.
les calculs marchent mais la boucle pour recommencer un calcul QUE si on entre 1 recommence memme quand je met autre chose que le 1.
C'est normal, regarde la condition dans ton while, c'est aps comme ça qu'on écrit.
putain le con j’avais pas vu ![]()
Merci ![]()