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
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
A voir également:
- Pb calculatrice en c
- Installer calculatrice sur mon portable - Télécharger - Calcul & Conversion
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Ma-calculatrice - Télécharger - Calcul & Conversion
- Calculatrice windows 7 - Télécharger - Calcul & Conversion
- Mettre sa calculatrice en degré casio graph 35+e ✓ - Forum calculatrices
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
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.
*dans la fonction main elimine la derniere printf car la fonction initial affiche le résultat.
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
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 !
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 !
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
19 oct. 2009 à 00:37
Merci pour vos réponses je vais corigé mon code, je vous tient au courant..
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
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
#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
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
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..
Le resultat est 2 10 4 = 134514293, et qui est certainement incorrecte..
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
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.
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.