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 :(
Configuration: Windows Vista
Firefox 2.0.0.17

18 réponses

  1. guillaume_74 Messages postés 116 Statut Membre 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
    1. mype Messages postés 2459 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
  2. guillaume_74 Messages postés 116 Statut Membre 22
     
    ben dev cpp alors :p c'est celui que j'utilise lol^^
    1
  3. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    ben en tout cas le prob il vient pas du code ;)
    1
  4. guillaume_74 Messages postés 116 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. farah07
     
    bsr, pour avoir la resultat èxact tu doit mettre larcolag({) apres "case" et arcolag(}) avant break
    0
  7. Fullren
     
    J'essaie , ca ne change strictement rien, toujours 0.0000 ..
    0
  8. Aliuviel
     
    Il sert à quoi ce return 0 à la fin de ta fonction?
    0
  9. 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
  10. Fullren
     
    Mais il parait effectivement qu'il n'est pas indispensable, ca se fait automatiquement je crois.
    0
  11. 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
  12. 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
  13. mype Messages postés 2459 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
  14. Fullren
     
    J'utilise Code::Blocks aussi ... :'(
    0
    1. oupsman Messages postés 319 Statut Membre 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
      1. Fullren > oupsman Messages postés 319 Statut Membre
         
        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
      2. oupsman Messages postés 319 Statut Membre 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
  15. Fullren
     
    ca marche chez mype qui utilise Code::Block
    0
  16. 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
  17. Fullren
     
    Ah si j'utilise le fichier compilé ca marche !
    alors qu'avec "build and run" ca marche pas.
    0
  18. nemeditpasmerci
     
    reconfigure ton compilateur, j'avais eu un grand pb avec mon compilateur, set as default et reprends.
    0
  19. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    chez moi ton programme marche...
    -1