Création de calculatrice simple

Résolu/Fermé
Zexen Messages postés 11 Date d'inscription mercredi 16 novembre 2016 Statut Membre Dernière intervention 7 janvier 2017 - Modifié par crapoulou le 16/11/2016 à 20:14
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 18 nov. 2016 à 11:08
Bonjour,

j'ai crée ce qui est censé être une calculatrice simple (avec les 4 opérations de base) mais qui ne l'est pas et je comprend pas pourquoi...(je suis juste un débutant).
Voici mon code:

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

void main()
{
int a,b;
char operateur;
int choix;

do {

    printf("1.entrer une expression\n");
    printf("2.quitter\n");
    scanf("%d", choix);

    if(choix == 1)
    {
    scanf("%d%c%d",&a,&operateur,&b);

    switch(operateur)
        {
            case '+' : printf("%d + %d = %d",a,b,a+b);
            break;
            case '-' : printf("%d - %d = %d",a,b,a-b);
            break;
            case '*' : printf("%d * %d = %d",a,b,a*b);
            break;
            case '/' :
            if ( b == 0)
                {
                    printf(" division par zero impossible\n");
                }
            else
                {
                    printf("%d / %d = %d",a,b,a/b);
                }
            break;
            default : printf(" operateur non accepte\n");
            break;
            system("pause");
        }
    }
    if(choix == 2)
    {
        system("cls\n");
    }
    }while (choix != 2);
}


quand je lance le programme, il n'y a aucun problème. Mais quand je prend un des deux choix (donc 1 ou 2) le programme se casse la figure et une fenêtre disant que le compilateur a cessé de fonctionner apparaît.
Donc je cherche l’erreur et l’éventuelle correction,

merci.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


A voir également:

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 18/11/2016 à 10:22
Salut Zexen,

En compilant ton code avec les Warnings, le compilateur, bien qu'il accepte de produire un exécutable, te signale un certain nombre de problèmes :

$ gcc -Wall zexen.c
zexen.c:4:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
void main()
^
zexen.c: In function ‘main’:
zexen.c:14:3: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
scanf("%d", choix);
^
zexen.c:14:3: warning: ‘choix’ is used uninitialized in this function [-Wuninitialized]

En C, tu dois toujours compiler avec les warnings, et il ne faut jamais les ignorer, mais, au contraire, essayer de comprendre pourquoi ils se manifestent et corriger le code pour les éliminer tous. Les warnings te signalent dans 90% des cas des erreurs, ou des choses qui vont, tôt ou tard provoquer des erreurs.


Dal
0
Zexen Messages postés 11 Date d'inscription mercredi 16 novembre 2016 Statut Membre Dernière intervention 7 janvier 2017
18 nov. 2016 à 10:56
je vais voir ça , merci!
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
18 nov. 2016 à 11:08
Pas de pb. Si tu ne comprends pas certains avertissements, après avoir cherché par toi-même, pose la question ici.

Corriger ces warnings devrait éliminer la source du plantage, qui est une corruption de la mémoire.

Ce ne sont pas les seuls problèmes dans ton code, mais cela tu t'en apercevra en compilant et en testant son fonctionnement :-)
0