Pb calculatrice en c
Me--and--Me
Messages postés
72
Date d'inscription
Statut
Membre
Dernière intervention
-
Yoan Messages postés 11795 Date d'inscription Statut Modérateur Dernière intervention -
Yoan Messages postés 11795 Date d'inscription Statut Modérateur Dernière intervention -
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);
}
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:
- Pb calculatrice en c
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Installer calculatrice - Télécharger - Calcul & Conversion
- Ma-calculatrice - Télécharger - Calcul & Conversion
- Calculatrice windows 7 - Télécharger - Calcul & Conversion
- Comment calculer la moyenne en excel - Guide
6 réponses
*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.
*dans la fonction main elimine la derniere printf car la fonction initial affiche le résultat.
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 !
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 !
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
#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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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..
Le resultat est 2 10 4 = 134514293, et qui est certainement incorrecte..
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.
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.