Probleme programme console c

Résolu/Fermé
dialga08 Messages postés 443 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 5 février 2012 - 11 nov. 2009 à 23:20
adnanforum Messages postés 204 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 21 janvier 2010 - 12 nov. 2009 à 22:55
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

skuti Messages postés 53 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 29 janvier 2013 2
12 nov. 2009 à 00:46
C'est normale !
resultatt est un double et dans ton printf tu utilise %d alors qu'il faudrais utilisé %lf
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 nov. 2009 à 07:11
Salut,
Il faut plutôt utiliser %f ;-)))

cdlt
0
dialga08 Messages postés 443 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 5 février 2012 83
12 nov. 2009 à 17:03
sa ne fonctionne pas

EDIT:avec double il m'affiche 0.0000000 meme en remplacant %d par %f
0
dialga08 Messages postés 443 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 5 février 2012 83
12 nov. 2009 à 17:20
il n' y a pas quelqu'un d'experimenter qui pourrais me repondre svp merci
0
adnanforum Messages postés 204 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 21 janvier 2010 38
12 nov. 2009 à 17:39
o lieu de mettre sqrt tu devrer mettre le calcule.merci de pressicer devc++ ou codeblocks
0

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

Posez votre question
skuti Messages postés 53 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 29 janvier 2013 2
12 nov. 2009 à 17:53
met ceci:

double resultatt = 0;
int nombre = 0;


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

printf("Racine carré de %d = %f ",nombre,resultatt);
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 nov. 2009 à 20:00
resultatt = sqrt((double)nombre);
Le cast est inutile puisqu'implicite.

Cdlt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 nov. 2009 à 19:59
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
0
skuti Messages postés 53 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 29 janvier 2013 2
12 nov. 2009 à 20:06
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
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 nov. 2009 à 21:42
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.
0
samar83 Messages postés 67 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 12 novembre 2009 2
12 nov. 2009 à 20:14
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:...........;
0
dialga08 Messages postés 443 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 5 février 2012 83
12 nov. 2009 à 20:37
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..
0
skuti Messages postés 53 Date d'inscription dimanche 27 septembre 2009 Statut Membre Dernière intervention 29 janvier 2013 2
12 nov. 2009 à 21:04
Parceque racine carré de 1 egale 1 !!!
0
dialga08 Messages postés 443 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 5 février 2012 83
12 nov. 2009 à 22:53
merci a tous pour m'avoir aider
racine carré de 1 = 1 lol
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 nov. 2009 à 22:54
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
0
adnanforum Messages postés 204 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 21 janvier 2010 38
12 nov. 2009 à 22:55
derien crane de cp
0