Probleme programme console c

Résolu
bonjour,
quand je choisi racine carre,j'entre le nombre et le resultat affiche 0
comment regler ce probleme
voici mon code...

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

int main()
{
    int resultat = 0,nombre1 = 0,nombre2 = 0;
    double resultatt = 0,nombre = 0;    
int choix_menu = 0;

        printf("CHOIX DE VOTRE OPERATION");
        printf("\n\n1.addition\n");
        printf("2.soustraction\n");
        printf("3.multiplication\n");
        printf("4.division\n");
        printf("5.racine carre\n");
        scanf("%d",&choix_menu);

       switch(choix_menu)
            {
            case 1:
            printf("entrer le premier terme\n");
            scanf("%d",&nombre1);
            printf("entrer le deuxieme terme\n");
            scanf("%d",&nombre2);

            resultat = nombre1 + nombre2;
            printf("\n%d + %d = %d\n",nombre1,nombre2,resultat);
            default:
            break;
            //separation
            case 2:
            printf("entrer le premier terme\n");
            scanf("%d",&nombre1);
            printf("entrer le deuxieme terme\n");
            scanf("%d",&nombre2);

            resultat = nombre1 - nombre2;
            printf("\n%d - %d = %d\n",nombre1,nombre2,resultat);
            break;
            //separation
            case 3:
            printf("entrer le premier facteur\n");
            scanf("%d",&nombre1);
            printf("entrer le deuxieme facteur\n");
            scanf("%d",&nombre2);

            resultat = nombre1 * nombre2;
            printf("\n%d * %d = %d\n",nombre1,nombre2,resultat);
            break;
            //separation
            case 4:
            printf("entrer le dividante\n");
            scanf("%d",&nombre1);
            printf("entrer le diviseur\n");
            scanf("%d",&nombre2);

            resultat = nombre1 / nombre2;
            printf("\n%d / %d = %d\n",nombre1,nombre2,resultat);
            break;
            //separation
            case 5:
            printf("entrer le nombre\n");
            scanf("%d",&nombre);

            resultatt = sqrt(nombre);
            printf("\nracine carre de %d = %d\n",nombre,resultatt);

            break;



            }


     return = 0;
}


merci

12 réponses

  1. C'est normale !
    resultatt est un double et dans ton printf tu utilise %d alors qu'il faudrais utilisé %lf
    1. Contributeur
      Salut,
      Il faut plutôt utiliser %f ;-)))

      cdlt
  2. sa ne fonctionne pas

    EDIT:avec double il m'affiche 0.0000000 meme en remplacant %d par %f
    1. il n' y a pas quelqu'un d'experimenter qui pourrais me repondre svp merci
      1. o lieu de mettre sqrt tu devrer mettre le calcule.merci de pressicer devc++ ou codeblocks
        1. met ceci:

          double resultatt = 0;
          int nombre = 0;
          
          
          scanf("%d", &nombre);
          resultatt = sqrt((double)nombre);
          
          printf("Racine carré de %d = %f ",nombre,resultatt);
          
          1. Contributeur
            resultatt = sqrt((double)nombre);
            Le cast est inutile puisqu'implicite.

            Cdlt
        2. Contributeur
          Salut,

          Après relecture du programme, l'erreur vient de trois endroits.


          scanf("%lf",&nombre);
          printf("\nracine carre de %f = %f\n",nombre,resultatt);


          Tu as mis des doubles en arguments, donc tu vas empiler 2*sizeof(double) dans la pile. La fonction printf va déchiffrer le pattern %d %d (que tu avais mis dans ton premier programme). Lors du premier %d, il va se référer aux premiers bits (première partie du double puisque le double est plus grand que l'integer), et le deuxième %d va se référer sur la suite (donc deuxième partie des bits). Et la deuxième partie est souvent à 0 puisque la précision est grande, tu vois 0 qui s'affiche.

          Et enfin, attention, tu as mis return = 0; au lieu de return 0;

          Cdlt
          1. je ne suis pas d'accord avec vous puisqu'en fonction des logiciel il y a quelque bug.
            Sous code bloc sa ne fonctionne pas toujours.
            Comme j'ai pus le tester sur code blocks en mettant %lf partout et en declarant mes variables en double j'obtenais 0 a chaque fois.
            C'est pour sa que j'ai posté ce code
            1. Contributeur
              Normal, l'erreur est situé comme je l'ai dit plus haut.
              Dans certains cas effectivement il faut caster, mais celui-là n'en fait clairement pas partie.
          2. bonsoir,
            pourkoi mettre default au milieu de switch? essaye de le mettre en dernier lieu après case 5!
            c-a-d: case 1: .........;
            case 2:........;
            case 3:..........;
            case 4:.........;
            case 5:..........;
            default:...........;
            1. Met ceci: 
              
              
              
              double resultatt = 0;
              int nombre = 0;
              
              
              scanf("%d", &nombre);
              resultatt = sqrt((double)nombre);
              
              printf("Racine carré de %d = %f ",nombre,resultatt);


              quand je rentre "1"
              il n'afiche que l'entier donc 1.00000000..
              1. merci a tous pour m'avoir aider
                racine carré de 1 = 1 lol
                1. Contributeur
                  Je retiens à rajouter que :
                  double resultatt = 0;
                  int nombre = 0;

                  scanf("%d", &nombre);
                  resultatt = sqrt((double)nombre);

                  printf("Racine carré de %d = %f ",nombre,resultatt);


                  Le cast de nombre en double est facultatif ;-))).

                  Cdlt