IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème de ma calculatrice


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Par défaut Problème de ma calculatrice
    Salut à tous.
    J'ai un petit problème avec mon code de ma calculatrice.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
      int choixMenu;
     
      printf("Bienvenue dans la calculatrice !\n\n");
      printf("Options :\n\n");
      printf("1. Addition\n");
      printf("2. Soustraction\n");
      printf("3. Multiplication\n");
      printf("4. Division\n");
      printf("\nQuelle option avez-vous choisie ? ");
      scanf("%d", &choixMenu);
     
      printf("\n");
     
     
     
      int nbre1adde = 0;
      int nbre2adde = 0;
      int resultatadde = 0;
     
      switch (choixMenu)
      {
        case 1:
           printf("Vous avez choisi l'addtion.\n\n");
           break;
      }
           int choixtypeadd;
     
           printf("Types d'addtion : \n\n");
           printf("1. Addition avec nombres entiers\n");
           printf("2. Addition avec nombres decimaux\n");
           printf("\nQuel type d'addtion avez-vous choisi ? ");
           scanf("%d",&choixtypeadd);
     
      double nbre1addd = 0;
      double nbre2addd = 0;
      double resultataddd = 0;
     
      switch (choixtypeadd)
      {
        case 1:
           printf("\nVous avez choisi l'addtion avec nombres entiers\n\n");
           printf("Entrez le premier nombre : ",nbre1adde);
           scanf("%d",&nbre1adde);
           printf("\nEntrez le deuxieme nombre : ",nbre2adde);
           scanf("%d",&nbre2adde);
           resultatadde = nbre1adde + nbre2adde;
           printf("\nLe resultat est : %d",resultatadde);
           break;
        case 2:
           printf("\nVous avez choisi l'addtion avec nombres decimaux\n\n");
           printf("Entrez le premier nombre : ",nbre1addd);
           scanf("%f",&nbre1addd);
           printf("\nEntrez le deuxieme nombre : ",nbre2addd);
           scanf("%f",&nbre2addd);
           printf("\nLe resultat est : %f",nbre1addd + nbre2addd);
           break;
      }
     
      printf("\n\n");
     
      return 0;
    }
    Sauriez-vous pourquoi quand je choisi le type d'addition 2 le calcul de la variable nbre1addd + nbre2addd me donne 0.00000 ?

    Merci.

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Hello,

    Ton code me parait tres compliqué, mais bon, si tu debute, cela n'est pas si mal que ca.

    Ton probleme est un probleme classique chez les debutant, a savoir l'utilisation de scanf.

    scanf est une fonction dite formaté, c'est a dire que le type de format que tu lui donne en argument et la variable doivent etre du meme type, sinon, le comportement est totalement indeterminé (mais en general, il met 0).

    donc, si tu regarde bien, tu fais cette faute.
    Si, si ... ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
      double nbre1addd = 0;
      double nbre2addd = 0;
      double resultataddd = 0;
     
      switch (choixtypeadd)
      {
        case 1:
           printf("\nVous avez choisi l'addtion avec nombres entiers\n\n");
           printf("Entrez le premier nombre : ",nbre1adde);
    
           scanf("%d",&nbre1adde);
    
           printf("\nEntrez le deuxieme nombre : ",nbre2adde);
    
           scanf("%d",&nbre2adde);
    
           resultatadde = nbre1adde + nbre2adde;
           printf("\nLe resultat est : %d",resultatadde);
           break;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Par défaut
    Merci beaucoup de ta part de m'avoir répondu, mais maintenant je ne sais pas comment arranger de problème de "scanf" Pourrais-tu m'aider stp ?

    Et ca ne résoud pas le problème de calcul décimal

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Je voudrais bien te repondre, mais je voudrais savoir a peu pres quel niveau tu as.

    Par exemple, tu as juste fais un main, pas de fonction. Alors forcement, ca alourdi grandement le code. Si tu sais faire des fonctions ou pourrais faire quelque chose de sympa, sinon on va devoir faire de gros switch case.
    Ce que tu peux faire, c'est faire une addition avec des nombre decimaux, puis afficher le resultat en fonction de ce que decide l'utilisateur.
    Ca pourrait donner quelque chose de ce style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    double nombre1 = 0.0;
    double nombre2 = 0.0;
     
    int choix = 0;
    scanf ("%d", &choix);
     
    scanf ("%lf", &nombre1);
    scanf ("%lf", &nombre2);
     
    if (choix == 0)
    {
        /* On test si les nombres rentrer sont bien des entier */
        if ((nombre1 - floor(nombre1) != 0) || (nombre1 - floor(nombre1) != 0))
        {
            printf("Vous devez rentrer des nombres entier !");
        }
        else
        {
            printf("%d", (int) (nombre1 + nombre2)); 
        }
    }
    else
    {
         printf("%f", nombre1 + nombre2); 
    }
    On peut aussi tout simplement declarer les varaible avec les bon type en fonction de ce que demande l'utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
     
    int choix = 0;
    scanf ("%d", &choix);
     
     
    if (choix == 0)
    {
        double nombre1 = 0.0;
        double nombre2 = 0.0;
     
        scanf ("%lf", &nombre1);
        scanf ("%lf", &nombre2);
     
        printf("%lf", nombre1 + nombre2); 
    }
    else
    {
        int nombre1 = 0;
        int nombre2 = 0;
     
        scanf ("%d", &nombre1);
        scanf ("%d", &nombre2);
     
         printf("%d", nombre1 + nombre2); 
    }


    Plusieurs remarque deja.
    Le code 2 est plus propres que le code 1.
    La gestion de la demande de choix pour l'utilisateur est incomplete :
    tu demande a l'utilisateur de rentrer 1 ou 2, mais qui te dit qu'il ne va pas rentrer 3 ?
    Tu dois donc gerer de maniere sur la sortie, sinon c'est nawak assuré après.

    Par exemple, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    int continuer;
    int choix;
     
    do
    {
        continuer = 0;
     
        /* Le bla bla du menu */
        choix = scanf("%d", &choix);
     
        /* S'il l'utilisateur rentre un nombre incorrect */
        if (...)
        {
             continuer = 1;
             printf ("Vous avez rentrer une mauviase saisie ! Lisez bien ce qui suit !\n");
        }
     
    }while(continuer);
    Ici, si tu met bien la bonne condition pour le if, tu est (presque) sur de ce qui va sortir. De plus, le menu se reaffiche apres une phrase d'erreur.

    Le mieux serait de faire des fonctions.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    SofEvans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double nombre1 = 0.0;
    double nombre2 = 0.0;
     
    int choix = 0;
    scanf ("%d", &choix);
     
    scanf ("%f", &nombre1);
    scanf ("%f", &nombre2);
    Attention, %f est pour un float, pas pour un double. Cela n'a pas d'importance pour un printf, mais pour un scanf, il faut que le format corresponde exactement à la donnée.
    Utiliser %lf

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Zut, j'ai écrit trop vite

    Merci diogene.

    (%lf, ca marche pour un double ??

    Je croyais que c'était uniquement pour long-float ?)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème code source calculatrice !
    Par MarvinBosst dans le forum C++
    Réponses: 8
    Dernier message: 30/03/2015, 19h43
  2. Problème calculatrice simple
    Par beber54 dans le forum VBA Access
    Réponses: 8
    Dernier message: 23/10/2008, 18h18
  3. Calculatrice : problème de case of
    Par nicolasg8 dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2008, 19h27
  4. Problème de Calculatrice
    Par Jiraiya42 dans le forum C
    Réponses: 5
    Dernier message: 28/09/2006, 23h07
  5. problème pour une calculatrice
    Par Anthobask dans le forum C
    Réponses: 4
    Dernier message: 19/12/2005, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo