Pb calculatrice en c

Fermé
Me--and--Me Messages postés 72 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 22 février 2010 - 19 oct. 2009 à 00:09
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 - 20 oct. 2009 à 11:56
Bonsoir j'ai fait le code c d'une calculatrice mais ça me renvoit une fausse resultat !!! et je vois pas ma faute :

Pouvez vous m'aidze svp, voici le code :

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


/* Fonction calcul(), c'est ce qui sert à calculer les nombres demandés */
int calcul()
{
int nb1, nb2;
char operation;
switch (operation)// on utulise la fonction switch ce qui va permettre d'illuster les différents opérateurs
{
case '+' : return (nb1 + nb2); // Si operation vaut '+', alors on ajoute les 2 nombres
break ;
case '-' : return (nb1 - nb2); // Si operation vaut '-', alors on soustrait les 2 nombres
break ;
case '*' : return (nb1 * nb2); // Si operation vaut '*', alors on multiplie les 2 nombres
break ;
case '/' : return (nb1 / nb2); // Si operation vaut '/', alors on divise les 2 nombres
}
}


char initial()
{
int nb1, nb2, resultat;
char operation;

// On demande à l'utilisateur deux nombres et un opérateur
printf("Entrez le premier nombre : ");
scanf("%d", &nb1);
printf( "Entrez le second nombre : ");
scanf("%d",&nb2);
printf( "Maintenant, entrez l'operateur ('+', '-', '*' ou '/') : ");
scanf("%c", &operation);


// On fait le calcul grâce à le fonction calcul() définie plus haut
resultat = calcul(nb1, nb2, operation);
//printf("Le resultat est %d %d %d = %d\n" , nb_1, operateur,nb_2, resultat);

}

int main(void)
{
int nb1, nb2, resultat;
char operation;
int calcul();
char initial();
printf("Le resultat est %d %c %d = %d\n" , nb1, operation,nb2, resultat);
}
A voir également:

6 réponses

marie pink angel Messages postés 85 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 18 avril 2011 4
19 oct. 2009 à 00:29
*il faut mettre le 1er et le 2eme nombre et l'operateur comme argument dans la fonction calcul et le 1er et le 2eme nombre et l'operateur et le resultat comme argument dans la fonction initial.
*dans la fonction main elimine la derniere printf car la fonction initial affiche le résultat.
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
19 oct. 2009 à 00:31
Il y a plusieurs soucis :
D'abord, si tu déclares une variables à l'intérieur du bloc initial { } alors cette variable locale n'est visible que dans ce bloc. Donc toutes tes variables nb1, nb2, resultat et operation que tu remplis dans initial { } elles n'ont pas du tout la même valeur dans main { }. D'ailleurs comme tu ne les initialises pas dans le main non plus elles ont une valeur tout à fait aléatoire, dépendant de ce qu'il y a en mémoire au moment de l'allocation.

Si tu tiens vraiment à faire une fonction initial dans ce cas-là il faut passer les variables en paramètre (par référence !).

Mais ta fonction initial ici n'a pas vraiment d'intérêt. Tout dans le main c'est très bien.

Note aussi que si tu déclares char initial(....) { ....} ça veut dire que cette fonction inital doit retourner un "char". Or il n'y a aucun retour. Il faut donc déclarer initial comme étant une procédure, ainsi : void initial(....) { ....} signifie que initial ne renvoie rien.

Autre problème énorme :
Quand tu appelles ta fonction calcul ici : resultat = calcul(nb1, nb2, operation);
tu lui passes trois paramètres. Or dans le prototype de la fonction calcul, celle-ci ne prend aucun paramètre !
0
Me--and--Me Messages postés 72 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 22 février 2010 5
19 oct. 2009 à 00:37
Merci pour vos réponses je vais corigé mon code, je vous tient au courant..
0
Me--and--Me Messages postés 72 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 22 février 2010 5
19 oct. 2009 à 00:43
alors voila le code corrigé, mais j'ai encore ce resultat bizarre, j'arrive pas afficher l'opérateur :

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


/* Fonction calcul(), c'est ce qui sert à calculer les nombres demandés */
int calcul(int nb1, int nb2, char operation)
{
switch (operation)// on utulise la fonction switch ce qui va permettre d'illuster les différents opérateurs
{
case '+' : return (nb1 + nb2); // Si operation vaut '+', alors on ajoute les 2 nombres
break ;
case '-' : return (nb1 - nb2); // Si operation vaut '-', alors on soustrait les 2 nombres
break ;
case '*' : return (nb1 * nb2); // Si operation vaut '*', alors on multiplie les 2 nombres
break ;
case '/' : return (nb1 / nb2); // Si operation vaut '/', alors on divise les 2 nombres
break ;
}
}

int main()
{ int nb_1, nb_2, resultat;
char operateur;
int calcul(int nb1, int nb2, char operation);
printf("Entrez le premier nombre : ");
scanf("%d", &nb_1);
printf( "Entrez le second nombre : ");
scanf("%d",&nb_2);
printf( "Maintenant, entrez l'operateur ('+', '-', '*' ou '/') : ");
scanf("%c", &operateur);

resultat = calcul(nb_1, nb_2, operateur);
printf("Le resultat est %d %c %d = %d\n");

}



affichage :


Me@Me-laptop:~/Bureau$ ./a.out calculette2.c
Entrez le premier nombre : 2
Entrez le second nombre : 4
Maintenant, entrez l'operateur ('+', '-', '*' ou '/') : Le resultat est 2 10 4 = 134514293
0

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

Posez votre question
Me--and--Me Messages postés 72 Date d'inscription vendredi 15 mai 2009 Statut Membre Dernière intervention 22 février 2010 5
19 oct. 2009 à 18:59
je trouve pas pourquoi je peut pas saisir l'opérateur et au lieu de ça c'est le resultat s'affiche ainsi :
Le resultat est 2 10 4 = 134514293, et qui est certainement incorrecte..
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
20 oct. 2009 à 11:56
Oui. Prendre le caractère après les entiers ça ne foncitonne pas. Je ne sais pas pourquoi. Ca doit être une histoire de caractère qui reste dans le tampon ou quelque-chose dans ce genre-là mais je ne sais pas l'expliquer. Ce que tu peux faire c'est prendre le caractère avant les entiers (un getchar() suffit, pas besoin de scanf()).

Pense à deux autres points :
* Tu as déclaré resultat, nb_1 et nb_2 comme étant entiers, ne sois pas donc surpris si ta calculatrice te dit que 1/2=0 ! Ou alors change-les pour des float.
* tu as indiqué que main() devait retourner un entier (et d'ailleurs c'est toujours le cas : int main(...)) donc il faut lui faire renvoyer un entier. Avant de fermer le bloc main() (i.e. sa dernière accolade), retourne la valeur 0 : elle indique au système que le programme s'est déroulé correctement.
0