Voila , excusez moi d´avoir posté 2fois en 30min mais j´ai un autre probleme avec ce script (Je sais les long au début c´est pas beau
et dès que je lance le programme compilé , il me met console.exe ne réponds pas mais le débuggeur ne m´indique aucun probleme
int main()
{
long nombre = 0;
long div1 = 0;
long div2 = 0;
long mul1 = 0;
long mul2 = 0;
long ad1 = 0;
long ad2 = 0;
long sou1 = 0;
long sou2 =0;
printf("Bonjour , que voulez vous effectuer ?\ n\n");
printf("Division : Tapez 1 \nMultiplication : Tapez 2 \nAddition : Tapez 3 \nSoustraction : Tapez 4 \n");
scanf("%ld", nombre);
if (nombre == 1)
{
printf("Alors comme ca tu veux faire une division ? Et bien tape le premier nombre \n");
scanf("%ld",div1);
printf("Le deuxieme \n");
scanf("%ld",div2);
printf("Le resultat est de : div1 / div2");
}
else if (nombre == 2)
{
printf("Quel est le premier nombre de ta multiplication ?\ n");
scanf("%ld",mul1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",mul2);
}
else if (nombre == 3)
{
printf("Quel est le premier nombre de ta soustraction ? \n");
scanf("%ld",sou1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",sou2);
} else if (nombre == 4)
{
printf("Quel est le premier nombre de ton addition ?\ n");
scanf("%ld",ad1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",ad2);
}
else if (nombre > 4)
{
printf("euh tu ne sais pas compter ?" );
}
return 0;
}
Meme en faisant intervenir le Switch au lieu des "if" ca ne marche pas , est ce que ca marche chez vous ?
int main()
{
long nombre;
long div1 = 0;
long div2 = 0;
long mul1 = 0;
long mul2 = 0;
long ad1 = 0;
long ad2 = 0;
long sou1 = 0;
long sou2 =0;
printf("Bonjour , que voulez vous effectuer ?\ n\n");
printf("Division : Tapez 1 \nMultiplication : Tapez 2 \nAddition : Tapez 3 \nSoustraction : Tapez 4 \n");
scanf("%ld", &nombre);
switch (nombre)
{
case 1:
printf("Alors comme ca tu veux faire une division ? Et bien tape le premier nombre \n");
scanf("%ld",div1);
printf("Le deuxieme \n");
scanf("%ld",div2);
printf("Le resultat est de : div1 / div2");
break;
case 2:
printf("Quel est le premier nombre de ta multiplication ?\ n");
scanf("%ld",mul1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",mul2);
break;
case 3:
printf("Quel est le premier nombre de ta soustraction ? \n");
scanf("%ld",sou1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",sou2);
break;
case 4:
printf("Quel est le premier nombre de ton addition ?\ n");
scanf("%ld",ad1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",ad2);
break;
default:
printf("euh tu ne sais pas compter ?" );
break;
}
return 0;
}
Premièrement je te conseillerai de décomposer tes applications en fonctions ( addition(x,y), multiplication(x,y)) ca t´éviterait d´avoir des déclarations de variables qui servent à rien. Ca te permettrait aussi de tester facilement tes applications une par une.
Ensuite, essaye de remplacer tes initialisations de variables par 1 au lieu de 0.
Tout d´abord , merci a toi pour ta réponse , j´ai essayé en remplacant les valeurs initiales des variables a 1 mais ca ne marche toujours pas et je ne comprends pas trop "je te conseillerai de décomposer tes applications en fonctions ( addition(x,y), multiplication(x,y)) "
Voila pour la correction en quelque sorte mais s´il vous plait , pouvez vous essayez de C/C ce qui suit et d´essayer de le compiler pour me dire ce qui ne va pas merci bcp
int main()
{
long nombre = 1;
long div1 = 1;
long div2 = 1;
long mul1 = 1;
long mul2 = 1;
long ad1 = 1;
long ad2 = 1;
long sou1 = 1;
long sou2 = 1;
printf("Bonjour , que voulez vous effectuer ?\ n\n");
printf("Division : Tapez 1 \nMultiplication : Tapez 2 \nAddition : Tapez 3 \nSoustraction : Tapez 4 \n");
scanf("%ld", &nombre);
switch (nombre)
{
case 1:
printf("Alors comme ca tu veux faire une division ? Et bien tape le premier nombre \n");
scanf("%ld", &div1);
printf("Le deuxieme \n");
scanf("%ld", &div2);
printf("Le resultat est de : div1 / div2");
break;
case 2:
printf("Quel est le premier nombre de ta multiplication ?\ n");
scanf("%ld", &mul1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld", &mul2);
break;
case 3:
printf("Quel est le premier nombre de ta soustraction ? \n");
scanf("%ld", &sou1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld", &sou2);
break;
case 4:
printf("Quel est le premier nombre de ton addition ?\ n");
scanf("%ld", &ad1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld", &ad2);
break;
default:
printf("euh tu ne sais pas compter ?" );
break;
}
return 0;
}
En fait les 1 servent à rien... j´avais pas lu tout le code et juste anticipé un truc genre évaluation de 0/0 sur la div... mais y´en a pas :p.
Je ne code pas en c donc je saurais pas repérer directement d´ou vient l´erreur.
Pour les fonctions, je pense que ce lien
http://www.siteduzero.com/tuto-3-2842-1-les-fonctions.html#ss_part_1
saura t´expliquer mieux que je ne le ferai, et dans ton langage en plus.
Moi cà marche, sauf qu´il y avait quelques n à recoller aux \ après le copié collé et que cà sort direct du programme sans attendre après avoir affiché le résultat de l´opération, mais sinon je n´ai pas le bug que tu a.
Tout d´abord, il est normal que ton programme afiche dans la console
"Le resultat est de : div1 / div2" !
Si tu veux lui demander le resultat de la division, tu tape :
printf("Le resultat est de : %f",float(div1/div2));
Le %f indique au compilateur que l´on a affaire a un nombre réel. (le %d indiquerait que c´est un entier).
Le second argument est le nombre (variable ou constante) qui correspond à ce %f, et tu peux en appeler autant que tu veux.
Exemple :
int e1,e2; //2 entiers e1 et e2
printf("Entrer les 2 entiers puis pressez entree \
n");
scanf("%d %d", &e1, &e2);
printf("e1*e2 = %d , e1+e2 = %d, e1/e2 = %f",e1*e2, e1+e2, e1/e2);
Pour en revenir à ton programme, il est normal que les additions, multiplications et soustractions ne fonctionnent pas puisque tu n´affiche pas le résultat.
Enfin, tu pourrais utiliser seulement 2 variables communes aux 4 opérations plutot que 8...
Ca consomme moins de mémoire et c´est plus lisible.
Ah oui et maintenant que j´y pense, résoud le problème de la division par 0 !
if (div2!=0)
afficher le resultat
else
printf("Calcul impossible"); !
... merci !
Voila , après avoir écouté vos conseils (ne mettre que 2variables , raccoller les \ et les n , prinf pour les 4 operations , et le %f float)
Mais j´ai toujours un probleme et je ne sais pas du tout d´ou ca vient ! C´est a partir du moment ou je valide le nombre demandé par la phrase "Que voulez vous effectuez ?" il me met que console.exe ne reponds pas ... Donc je ne sais pas si ca peut etre du a une erreur dans la suite (Apres le scanf("%ld",nombre); ) ou si ca vient d´avant
int main()
{
long nombre;
long v1;
long v2;
printf("Bonjour , que voulez vous effectuer ?\ n\n");
printf("Division : Tapez 1 \nMultiplication : Tapez 2 \nAddition : Tapez 3 \nSoustraction : Tapez 4 \n");
scanf("%ld", nombre);
if (nombre == 1)
{
printf("Alors comme ca tu veux faire une division ? Et bien tape le premier nombre \n");
scanf("%ld",v1);
printf("Le deuxieme \n");
scanf("%ld",v2);
if (v2!=0)
{
printf("Le resultat est de : %f",float(v1/v2));
}
else
{
printf("calcul impossible");
}
}
else if (nombre == 2)
{
printf("Quel est le premier nombre de ta multiplication ?\ n");
scanf("%ld",v1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",v2);
printf("Le resultat est donc de : %f",float(v1*v2));
}
else if (nombre == 3)
{
printf("Quel est le premier nombre de ta soustraction ? \n");
scanf("%ld",v1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",v2);
printf("Le resultat est donc de : %f",float(v1-v2));
} else if (nombre == 4)
{
printf("Quel est le premier nombre de ton addition ?\ n");
scanf("%ld",v1);
printf("Bien et le deuxieme ?\ n");
scanf("%ld",v2);
printf("Le resultat est donc de : %f",float(v1+v2));
}
else if (nombre > 4)
{
printf("euh tu ne sais pas compter ?" );
}
return 0;
}
a vous de vos reponses !
! je ne devrais pas changer la valeur par hasard en mettant set nombre to 10 apres avoir fait le calcul ? Car la il le lit en boucle non ?
alors voila j´ai corrigé ton CODE (et pas script)
int main()
{
int nombre;
int v1;
int v2;
printf("Bonjour , que voulez vous effectuer ?\ n\n");
printf("Division : Tapez 1 \nMultiplication : Tapez 2 \nAddition : Tapez 3 \nSoustraction : Tapez 4 \n");
scanf("%d", &nombre);
if (nombre == 1)
{
printf("Alors comme ca tu veux faire une division ? Et bien tape le premier nombre \n");
scanf("%d",&v1);
printf("Le deuxieme \n");
scanf("%d",&v2);
if (v2!=0)
{
printf("Le resultat est de : %f",(float)((float)v1/v2));
}
else
{
printf("calcul impossible");
}
}
else if (nombre == 2)
{
printf("Quel est le premier nombre de ta multiplication ?\ n");
scanf("%d",&v1);
printf("Bien et le deuxieme ?\ n");
scanf("%d",&v2);
printf("Le resultat est donc de : %d\n",(v1*v2));
}
else if (nombre == 4)
{
printf("Quel est le premier nombre de ta soustraction ? \n");
scanf("%d",&v1);
printf("Bien et le deuxieme ?\ n");
scanf("%d",&v2);
printf("Le resultat est donc de : %d\n",(v1-v2));
} else if (nombre == 3)
{
printf("Quel est le premier nombre de ton addition ?\ n");
scanf("%d",&v1);
printf("Bien et le deuxieme ?\ n");
scanf("%d",&v2);
printf("Le resultat est donc de : %d\n",(v1+v2));
}
else if (nombre > 4)
{
printf("euh tu ne sais pas compter ?\ n" );
}
return 0;
}
les modifs:
-int au lieu de long
-%d au lieu de %ld
-pour caster un résultat en float il faut faire comme ceci
(float)((float)x/y)
le premier (float) n´est pas obligatoire.
une operation (+ - * /) renvoie un int si les deux opérandes sont des int, un float si il y a au moins un float.
-rajout de & dans les scanf, il faut passer tes variables par adresse et non par valeur sinon elle ne sont pas modifiées.
- inversion des cas 3 et 4 (ça colait pas avec le choix)
- changement de %f en %d pour l´addition, la multiplication et la soutraction (aucune ne renvoie de float avec des opérandes entieres)
je crois que c´est tout.
PS si tu es sous windows ajoute
system("pause");
a la fin pour éviter la fermeture de la fenetre.
Merci beaucoup a toi ca marche a merveille (j´avais dit script car j´etais habitué aux editeurs de jeux avec des conditions) merci !
"
-pour caster un résultat en float il faut faire comme ceci
(float)((float)x/y) "
Bizzare, j´ai toujours fait float(x/y) et ca marche... C´est une question de standart si on fait l´autre truc ?
mon compilo (gcc) me crie dessus quand je fais
float(x)
il faut mettre le type entre parenthèses comme ceci
(float) x
float(x) c´est du C++ je crois (ou alors un ajout récent au C, ou je ne sais quoi).
Mais fut un temps seul (float)x existait. Donc selon les options que tu donne à gcc il peut effectivement n´acepté que cette première forme.
j´utilise gcc 4.0 et sans option il n´accepte que (float)x