Resultat nul pour tout calcul en C, pourquoi?

Résolu
Fullren -  
 nemeditpasmerci -
Bonjour,

J'essaie de programmer une calculatrice très très basique pour m'entraîner a la programmation en C , seulement j'ai un gros problème : tout se déroule parfaitement jusqu'au resultat : le resultat de chaque calcul est de 0.0000 ... peu importe quel nombre je prends
j'ai essayé en modifiant le type des variables des resultats, en les initialisant a 0 ou en ne le faisant pas, en choisissant des nombres de la forme "3" et de la forme "3.0" ... rien n'y fait !

Voila mon code source :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
long choixCalcul = 0;
double nombre1 = 0;
double nombre2 = 0;
double resultatAdd = 0;
double resultatSous = 0;
double resultatMult = 0;
double resultatDiv = 0;
double resultatRac = 0;

printf("Bienvenue sur la super calculatrice.\n\n");
printf("Choisissez maintenant le type de calcul que vous souhaitez faire:\n");
printf("1: Addition\n");
printf("2: Soustraction\n");
printf("3: Multiplication\n");
printf("4: Division\n");
printf("5: Racine carree\n");
scanf("%d", &choixCalcul);

switch (choixCalcul)
{
case 1:
printf("Choisissez le premier nombre a additionner.\n");
scanf("%lf", &nombre1);
printf("Choisissez maintenant le deuxieme nombre a additionner.\n");
scanf("%lf", &nombre2);
resultatAdd = nombre1 + nombre2;
printf("Le resultat de votre addition est : %f.\n", resultatAdd);
break;
case 2:
printf("Choisissez le premier nombre auquel un deuxieme sera soustrait.\n");
scanf("%lf", &nombre1);
printf("Choisissez maintenant ce deuxieme nombre.\n");
scanf("%lf", &nombre2);
resultatSous = nombre1 - nombre2;
printf("Le resultat de votre soustraction est : %f.\n", resultatSous);
break;
case 3:
printf("Choisissez le premier nombre a multiplier.\n");
scanf("%lf", &nombre1);
printf("Choisissez le deuxieme nombre a multiplier.\n");
scanf("%lf", &nombre2);
resultatMult = nombre1 * nombre2;
printf("Le resultat de votre multiplication est : %f.\n", resultatMult);
break;
case 4:
printf("Choisissez le numerateur.\n");
scanf("%lf", &nombre1);
printf("Choisissez le denominateur.\n");
scanf("%lf", &nombre2);
resultatDiv = nombre1 / nombre2;
printf("Le resultat de votre division est : %f.\n", resultatDiv);
break;
case 5:
printf("Choisissez le nombre dont vous desirez la racine carree.\n");
scanf("%lf", &nombre1);
resultatRac = sqrt(nombre1);
printf("La racine carree de ce nombre est : %f.\n", resultatRac);
default:
printf("Ca vous amuse? Je vous rapelle qu'il n'y a que 5 choix.\n");
break;
}

system("PAUSE");
return 0;


}




Besoin d'aide :(
A voir également:

18 réponses

guillaume_74 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   22
 
si tu mets un int main()
faut faire return 0;
sinon, si tu fais void main(), faut rien faire... même si par défaut il le fait! question de principe!

pour ton code, ce qui me plait pas c'est les variables que tu utilises... ou comment tu t'en sers....
par exemple tu utilise un long pour le choix... alors qu'un short est largement suffisant....
mais c'est du chipotage!! mois ce que je veux savoir... c'est que tu déclare des double, et tu t'en sers en tant que lon float.... normalement c'est pas pareil! %d pour un double!
sinon mon code marche chez moi aussii :)
essaie un autre compilateur... genre code::bock
1
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
le format du double c'est bien %lf soit long float
le %d c'est pour les int
et le %f pour les float
0
guillaume_74 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   22
 
ben dev cpp alors :p c'est celui que j'utilise lol^^
1
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
ben en tout cas le prob il vient pas du code ;)
1
guillaume_74 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   22
 
c'est bizarre... t'as essayer d'utiliser les variables correctement?
genre pour un int
faire %i
pour un float, un %f
etc....
1

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

Posez votre question
farah07
 
bsr, pour avoir la resultat èxact tu doit mettre larcolag({) apres "case" et arcolag(}) avant break
0
Fullren
 
J'essaie , ca ne change strictement rien, toujours 0.0000 ..
0
Aliuviel
 
Il sert à quoi ce return 0 à la fin de ta fonction?
0
Fullren
 
Si j'ai bien compris, renvoyer "0" sert à "expliquer" a l'ordinateur que la fonction s'est déroulée sans erreur, pour qu'il puisse fermer le programme .

ps : c'est un programme sur console, si jamais ca change quelquechose

ps2 : Je suis vraiment débutant.
0
Fullren
 
Mais il parait effectivement qu'il n'est pas indispensable, ca se fait automatiquement je crois.
0
Aliuviel
 
Ah ok, je ne savais pas, quand j'ai été inité au langage C on faisait juste:

int main()
{
//Instructions
system("pause");
}

Dans ton code tu as oublié un break au niveau du case 5.
Je crois pas que tu aies besoin d'initialiser tes variables à 0.
Je pense que tu devrais garder les même types que les nombres saisis au niveau de tes résultats. Pour le reste je chercher un compilateur et je regarde ce qui cloche.
0
Fullren
 
J'ai essayé sans initialiser c'est la même chose. j'ai rajouté le break merci, même si ca ne resoud pas le problème.

content de savoir que ca marche au moins chez toi Mype.. mais pourquoi.. c'est la nouvelle question ^^
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
je sais pas moi j'utilise code block et sa fonctionne parfaitement...
voici ce que ça donne
Bienvenue sur la super calculatrice.

Choisissez maintenant le type de calcul que vous souhaitez faire:
1: Addition
2: Soustraction
3: Multiplication
4: Division
5: Racine carree
1
Choisissez le premier nombre a additionner.
2
Choisissez maintenant le deuxieme nombre a additionner.
3
Le resultat de votre addition est : 5.000000.
Appuyez sur une touche pour continuer...
0
Fullren
 
J'utilise Code::Blocks aussi ... :'(
0
oupsman Messages postés 316 Date d'inscription   Statut Membre Dernière intervention   10
 
Salut,  essaies ça, chez moi ça marche.

Remarque, c'est un vrai bordel ton programme, ton main est rop lourd, il faudra penser à répartir en plusieurs fonctions ;-)

à+

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]){
  int choixCalcul = 0;
  double nombre1, nombre2, resultatAdd, resultatSous, resultatMult, resultatDiv;

  printf("Bienvenue sur la super calculatrice.\n\n");
  printf("Choisissez maintenant le type de calcul que vous souhaitez faire:\n");
  printf("1: Addition\n");
  printf("2: Soustraction\n");
  printf("3: Multiplication\n");
  printf("4: Division\n");
  scanf("%d", &choixCalcul);

  switch (choixCalcul){
    case 1:{
           printf("Choisissez le premier nombre a additionner.\n");
           scanf("%lf", &nombre1);
           printf("Choisissez maintenant le deuxieme nombre a additionner.\n");
           scanf("%lf", &nombre2);
           resultatAdd = nombre1 + nombre2;
           printf("Le resultat de votre addition est : %f.\n", resultatAdd);
    }break;
    case 2:{
           printf("Choisissez le premier nombre auquel un deuxieme sera soustrait.\n");
           scanf("%lf", &nombre1);
           printf("Choisissez maintenant ce deuxieme nombre.\n");
           scanf("%lf", &nombre2);
           resultatSous = nombre1 - nombre2;
           printf("Le resultat de votre soustraction est : %f.\n", resultatSous);
    } break;
    case 3:{
           printf("Choisissez le premier nombre a multiplier.\n");
           scanf("%lf", &nombre1);
           printf("Choisissez le deuxieme nombre a multiplier.\n");
           scanf("%lf", &nombre2);
           resultatMult = nombre1 * nombre2;
           printf("Le resultat de votre multiplication est : %f.\n", resultatMult);
    } break;
    case 4:{
           printf("Choisissez le numerateur.\n");
           scanf("%lf", &nombre1);
           printf("Choisissez le denominateur.\n");
           scanf("%lf", &nombre2);
           resultatDiv = nombre1 / nombre2;
           printf("Le resultat de votre division est : %f.\n", resultatDiv);
    } break;   
    default:
            printf("Ca vous amuse? Je vous rapelle qu'il n'y a que 4 choix.\n");
    break;
}

system("PAUSE");
return 0;


}
0
Fullren > oupsman Messages postés 316 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'ai pas encore appris a répartir mon code en plusieur fonctions, en fait ce que j'ai appris se résume à peu près à ce que tu peux trouver dans mon programme, en un peu plus expliqué biensûr.

Mais bientôt ! :)
0
oupsman Messages postés 316 Date d'inscription   Statut Membre Dernière intervention   10 > Fullren
 
Pas de problème, essaies avec le code que je t'ai donné, normalement ça marche.
Si ton problème est résolu, n'oublies pas de mettre statut "résolu"

à+
0
Fullren
 
ca marche chez mype qui utilise Code::Block
0
Fullren
 
Bon eh bien je suis rassuré , au moins j'ai develloppé un "programme" qui fonctionne bien, reste a savoir ce qui cloche sur ma machine :)
merci a tous d'avoir pris le temps d'inspecter mon code !
0
Fullren
 
Ah si j'utilise le fichier compilé ca marche !
alors qu'avec "build and run" ca marche pas.
0
nemeditpasmerci
 
reconfigure ton compilateur, j'avais eu un grand pb avec mon compilateur, set as default et reprends.
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
chez moi ton programme marche...
-1