Rechercher : dans
Par :

Resultat nul pour tout calcul en C, pourquoi?

Dernière réponse le 21 oct 2008 à 12:16:23 Fullren, le 19 oct 2008 à 21:59:16 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « resultat nul pour tout calcul en C, pourquoi? » dans :
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Télécharger LangOver VoirNe vous est-il jamais arrivé de saisir un texte dans une langue donnée et que le résultat soit différent. C'est énervant quand on ne sait pas d'où ça vient et comment le résoudre. Une des causes principales de ce bug est le clavier qui est mal...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
Langage C++ - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...

1

farah07, le 19 oct 2008 à 22:05:35

Bsr, pour avoir la resultat èxact tu doit mettre larcolag({) apres "case" et arcolag(}) avant break

Répondre à farah07

2

Fullren, le 19 oct 2008 à 22:07:48

J'essaie , ca ne change strictement rien, toujours 0.0000 ..

Répondre à Fullren

3

Aliuviel, le 19 oct 2008 à 22:10:38

Il sert à quoi ce return 0 à la fin de ta fonction?

Répondre à Aliuviel

4

Fullren, le 19 oct 2008 à 22:12:58

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.

Répondre à Fullren

5

Fullren, le 19 oct 2008 à 22:13:57

Mais il parait effectivement qu'il n'est pas indispensable, ca se fait automatiquement je crois.

Répondre à Fullren

6

mype, le 19 oct 2008 à 22:17:24

Chez moi ton programme marche...

Répondre à mype

7

Aliuviel, le 19 oct 2008 à 22:20:30

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.

Répondre à Aliuviel

8

Fullren, le 19 oct 2008 à 22:23:31

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 ^^

Répondre à Fullren

9

mype, le 19 oct 2008 à 22:26:05

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...

Répondre à mype

10

guillaume_74, le 19 oct 2008 à 22:28:58
  • +1

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

Répondre à guillaume_74

13

mype, le 19 oct 2008 à 22:30:52
  • +1

Le format du double c'est bien %lf soit long float
le %d c'est pour les int
et le %f pour les float

Répondre à mype

11

Fullren, le 19 oct 2008 à 22:29:11

J'utilise Code::Blocks aussi ... :'(

Répondre à Fullren

19

oupsman, le 19 oct 2008 à 23:46:33

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;


}

Répondre à oupsman

20

Fullren, le 20 oct 2008 à 17:03:39

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 ! :)

Répondre à Fullren

21

oupsman, le 20 oct 2008 à 21:36:15
  • +1

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"

à+

Répondre à oupsman

12

guillaume_74, le 19 oct 2008 à 22:30:16
  • +1

Ben dev cpp alors :p c'est celui que j'utilise lol^^

Répondre à guillaume_74

14

Fullren, le 19 oct 2008 à 22:30:58

Ca marche chez mype qui utilise Code::Block

Répondre à Fullren

15

mype, le 19 oct 2008 à 22:34:00
  • +1

Ben en tout cas le prob il vient pas du code ;)

Répondre à mype

16

guillaume_74, le 19 oct 2008 à 22:34:33
  • +1

C'est bizarre... t'as essayer d'utiliser les variables correctement?
genre pour un int
faire %i
pour un float, un %f
etc....

Répondre à guillaume_74

17

Fullren, le 19 oct 2008 à 22:44:07

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 !

Répondre à Fullren

18

Fullren, le 19 oct 2008 à 23:08:18

Ah si j'utilise le fichier compilé ca marche !
alors qu'avec "build and run" ca marche pas.

Répondre à Fullren

22

 nemeditpasmerci, le 21 oct 2008 à 12:16:23

Reconfigure ton compilateur, j'avais eu un grand pb avec mon compilateur, set as default et reprends.

Répondre à nemeditpasmerci
Collection CommentÇaMarche.net