Programmation en c

Résolu
limbergh -  
mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous et à toutes,

j'essaye de créer une calculatrice en c et malheureusement ça
ne fonctonne pas.

Voici comment j'ai élaborer ce petit programme.

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

int main(int argc, char *argv[])
{
int resultat=0, nombre1=0, nombre2=0, operateur =0;

printf("entrez le 1er nombre :");
scanf("%ld", &nombre1);
printf("entrez un operateur :");
scanf("%ld", &operateur);
printf("entrez le 2eme nombre :");
scanf("%ld", &nombre2);

if (operateur = "*")
{
printf("%ld %ld %ld=%ld\n", & nombre1, operateur, nombre2, resultat);
}
else if (operateur = "/")
{
printf("%ld %ld %ld=%ld\n", & nombre1,operateur, nombre2, resultat);
}
else if (operateur = "-")
{
printf("%ld %ld %ld=%ld\n", & nombre1,operateur, nombre2, resultat);
}
else if (operateur = "+")
{
printf("%ld %ld %ld=%ld\n", & nombre1,operateur, nombre2, resultat);
}
system("PAUSE");
return 0;
}

pouvez-vous me dire comment le faire fonctionner, j'arrive à introduire les deux nombres et l'opérateur
mais il affiche un rélustat inatendu.

Merci d'avance
Configuration: Windows XP
Firefox 2.0.0.9

8 réponses

  1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    c'est pour eviter que operateur soit egal au caractere '\n'
    mais tu peux aussi utiliser la solution de lami20j
    et metre un getchar
    1
  2. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    ton operateur il faut que ça soit un caractere et avant le printf il faut faire le calcul tu as aussi d'autre petites erreur que j'ai corrigé voici ce que ça donne
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    int resultat=0, nombre1=0, nombre2=0;
    char operateur ;
    
    printf("entrez le 1er nombre :");
    scanf("%ld", &nombre1);
    printf("entrez un operateur :");
    scanf("%c""%c", &operateur,&operateur);
    printf("entrez le 2eme nombre :");
    scanf("%ld", &nombre2);
    
    if (operateur =='*')
    {
        resultat=nombre1*nombre2;
        printf("%d %c %d=%d\n",  nombre1, operateur, nombre2, resultat);
    }
    else if (operateur == '/')
    {
        resultat=nombre1/nombre2;
        printf("%d %c %d=%d\n",  nombre1,operateur, nombre2, resultat);
    }
    else if (operateur == '-')
    {
         resultat=nombre1-nombre2;
        printf("%d %c %d=%d\n",  nombre1,operateur, nombre2, resultat);
    }
    else if (operateur == '+')
    {
        resultat=nombre1+nombre2;
        printf("%d %c %d=%d\n",  nombre1,operateur, nombre2, resultat);
    }
    system("PAUSE");
    return 0;
    }
    
    0
  3. le père
     
    Bonsoir,

    L'idée est bonne mais il y a quelques petits problèmes. En première approche :

    scanf("%ld", &operateur); n'est pas bon : opérateur est un caractère, le format pour le lire et l'imprimer est %c et non pas %ld

    le caractère * en C se note '*' (apostrophe simple). avec des apostrophes doubles, tu définis une chaîne de caractères, ce qui n'est pas du tout la même chose

    if (operateur ='*') : l'erreur la plus classique chez les débutants en C. La comparaison c'est ==. Avec un seul =, tu donnes à la variable operateur la valeur '*'

    dans ta série de if .. else if .. tu oublies de calculer resultat

    enfin, dans tes printf, pourquoi ce & qui se promène ? En plus, avec un espace entre ce & et le nombre1, ça métonnerait que ton compilateur apprécie.

    Tu es sur la bonne voie, continue
    0
    1. limbergh
       
      "Le Père" bonsoir,

      merci à vous pour ces explications. C'est vrai que c'est mon premier programme en c
      et ce n'est pas facil du tout...

      Connaissez vous des sites ou je peux apprendre avec des tutorials, j'ai déjà visité
      siteduzero.com...

      Merci d'avance
      0
  4. limbergh
     
    salut Mype,

    merci pour tes corrections, il fonctionne mais j'ai toujours après les calclul un chiffre aléatoire qui s'affiche avant le résultat.

    Je ne comprend pas pourquoi. Et toi?

    encore merci pour ton aide
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    chez moi, fonctionne bien (compilé avec gcc sous GNU/Linux Debian)
    affiche ce que tu fait pour voir
    0
  7. limbergh
     
    entrez le 1er nombre :450
    entrez un operateur :/
    entrez le 2eme nombre :10
    2293616 / 10=45
    Appuyez sur une touche pour continuer...

    Voilà ce qu'affiche l'invité de commande
    0
  8. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    chez moi ça fonctionne...

    entrez le 1er nombre :450
    entrez un operateur :/
    entrez le 2eme nombre :10
    450 / 10=45
    Appuyez sur une touche pour continuer...
    
    Process returned 0 (0x0)   execution time : 15.787 s
    Press any key to continue.
    
    0
    1. limbergh
       
      chez moi pas mais c'est pas grave,
      pouvez-vous m'expliquer pourqoi on met deux fois dans le ligne scanf %c et &operateur
      ("%c""%c", &operateur, &operateur);

      merci
      0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Essaie comme ça
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
            int resultat=0, nombre1=0, nombre2=0;
            char operateur ;
    
            printf("entrez le 1er nombre :");
            scanf("%ld", &nombre1);
            getchar();
            printf("entrez un operateur :");
            scanf("%c", &operateur);
            printf("entrez le 2eme nombre :");
            scanf("%ld", &nombre2);
    
            if (operateur =='*')
            {
                        resultat=nombre1*nombre2;
                            printf("%d %c %d=%d\n",  nombre1, operateur, nombre2, resultat);
            }
            else if (operateur == '/')
            {
                        resultat=nombre1/nombre2;
                            printf("%d %c %d=%d\n",  nombre1,operateur, nombre2, resultat);
            }
            else if (operateur == '-')
            {
                         resultat=nombre1-nombre2;
                             printf("%d %c %d=%d\n",  nombre1,operateur, nombre2, resultat);
            }
            else if (operateur == '+')
            {
                        resultat=nombre1+nombre2;
                            printf("%d %c %d=%d\n",  nombre1,operateur, nombre2, resultat);
            }
            system("PAUSE");
            return 0;
    }
    
    0
    1. limbergh
       
      il m'affiche tjrs le meme nombre

      entrez le 1er nombre :450
      entrez un operateur :/
      entrez le 2eme nombre :10
      2293616 / 10=45
      Appuyez sur une touche pour continuer...

      PS : a quoi sert le getchar?
      0
      1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437 > limbergh
         
        apres avoir tapé le 1er nombre tu tape entréé le getchar rentre le caractere '\n' dans le buffer pour eviter que operateur soit egale '\n'
        0