Calculatrice et fonction en C

Résolu/Fermé
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 6 févr. 2008 à 17:24
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 févr. 2008 à 00:21
Bonjour,

je suis débutant en C et j'assaye de faire une calculatrice dans ce langage en utilisant
des fonctions. Mon problème est que aucune de mes fonctions ne
fonctionnent (et je suis sur que l'erreur vient de mon code).
Je m'explique sur mon code.
C'est un switch qui demande d'introduire un nombre, après l'opérateur et enfin
un deuxième nombre (rien de très élaboré!!!). De plus je ne sais pas comment
appeler mes fonctions pour afficher le résultat.

Merci d'avance pour vos explications.

Limbergh

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

int n1,n2,r,choix;
char op;
/* fonction calcul 1*/
int calcul(int n1)
{
printf("entrez un nombre : ");
scanf("%d", &n1);

return n1;
}
/*fonction de l'operateur*/
char operateur(char op)
{
printf("entrez l'operateur : ");
scanf(" %c", &op);

return op;
}
/*fonction du nombre 2*/
int calcul2(int n2)
{
printf("entrez un nombre : ");
scanf("%d", &n2);

return n2;
}

int main(int argc, char *argv[])
{
  

do
{ 

printf("-1- nombre 1\n");
printf("-2- operateur\n");
printf("-3- nombre 2\n");
printf("-4- resultat\n");
printf("votre choix===========>");
scanf("%d", &choix);
switch(choix)
{
case 1 :
     
     {
     int calcul(int n1);
     }
     
case 2 :
     {
     char operateur(char op);
     }
case 3 :
     {
     int calcul2(int n2);
     }
    
    
}

}
     

while(choix=!0);
  system("PAUSE");     
  return 0;
}



  
A voir également:

12 réponses

limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
6 févr. 2008 à 18:26
bonsoir,

j'ai changer des accolades mais je n'ai toujours pas de résultats...
Si quelqu'un peut m'aider....
AU SECOUOUUORS...

Non sans blague, merci d'avance pour vos interventions.

Limbergh

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

int n1,n2,r,choix;
char op;
/* fonction calcul 1*/
int calcul(int n1)
{
printf("entrez un nombre : ");
scanf("%d", &n1);

return n1;
}
/*fonction de l'operateur*/
char operateur(char op)
{
printf("entrez l'operateur : ");
scanf(" %c", &op);

return op;
}
/*fonction du nombre 2*/
int calcul2(int n2)
{
printf("entrez un nombre : ");
scanf("%d", &n2);

return n2;
}


int main(int argc, char *argv[])
{
  

do
{ 

printf("-1- nombre et operateur 1\n");
printf("-2- resultat\n");
printf("votre choix===========>");
scanf("%d", &choix);
switch(choix)
{
case 1:
     {
     calcul( n1);
     operateur( op);
     calcul2( n2);
     }
case  2:
     
     if (op=='+')
     {
     r=n1+n2;
     printf("%d\n", r);
     }
    
     if 
     (op=='-')
     {
     r=n1-n2;
     printf("%d\n", r);
     }
     
     if 
     (op=='/')
     {
     r=n1/n2;
     printf("%d\n", r);
     }
     
     if 
     (op=='*')
     {
     r=n1*n2;
     printf("%d\n", r);
     }
     
    
    
}

}
     

while(choix!=0);
  system("PAUSE");     
  return 0;
}       

 
1
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
6 févr. 2008 à 17:33
quand tu appelles une fonction il ne faut pas metre de type
ex: calcul( n1); (appel de la fonction calcul)
tes accolades aussi dans les cases sont inutiles car tu n'as qu'une seule instruction
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
6 févr. 2008 à 18:00
salut,

voilà, j'ai "aéré" un peu mon code mais (désolé je suis vraiment au début en c) quand je
veux afficher le résultat, il m'indique "0" dans ma variable.
Peux-tu m'aiguiller?????

Merci d'avance

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

int n1,n2,r,choix;
char op;
/* fonction calcul 1*/
int calcul(int n1)
{
printf("entrez un nombre : ");
scanf("%d", &n1);

return n1;
}
/*fonction de l'operateur*/
char operateur(char op)
{
printf("entrez l'operateur : ");
scanf(" %c", &op);

return op;
}
/*fonction du nombre 2*/
int calcul2(int n2)
{
printf("entrez un nombre : ");
scanf("%d", &n2);

return n2;
}


int main(int argc, char *argv[])
{
  

do
{ 

printf("-1- nombre et operateur 1\n");
printf("-2- resultat\n");
printf("votre choix===========>");
scanf("%d", &choix);
switch(choix)
{
case 1:
     
     calcul( n1);
     operateur( op);
     calcul2( n2);
   
case  2:
     {
     if (op=='+')
     r=n1+n2;
     printf("%d\n", r);
     }
     {
     if 
     (op=='-')
     r=n1-n2;
     printf("%d\n", r);
     }
     {
     if 
     (op=='/')
     r=n1/n2;
     printf("%d\n", r);
     }
     {
    if 
     (op=='*')
     r=n1*n2;
     printf("%d\n", r);
     }
     
    
    
}

}
     

while(choix!=0);
  system("PAUSE");     
  return 0;
}       

     
    
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
6 févr. 2008 à 18:25
c'est parce que les variables de tes fonctions et de ton main ne sont que des copies pour modifier les variables du main en utilisant les fonctions il te faut utilisé les pointeurs c'est un peu compliqué mais ça donne ça
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>

int n1,n2,r,choix;
char op;

/* fonction calcul 1*/
int calcul(int *n1)
{
printf("entrez un nombre : ");
scanf("%d", n1);

return *n1;
}
/*fonction de l'operateur*/
char operateur(char *op)
{
printf("entrez l'operateur : ");
scanf(" %c", op);

return *op;
}
/*fonction du nombre 2*/
int calcul2(int *n2)
{
printf("entrez un nombre : ");
scanf("%d", n2);

return *n2;
}


int main(int argc, char *argv[])
{


do
{

printf("-1- nombre et operateur 1\n");
printf("-2- resultat\n");
printf("votre choix===========>");
scanf("%d", &choix);
switch(choix)
{
case 1:{

     calcul( &n1);
     operateur( &op);
     calcul2( &n2);}
     break;

case  2:
     {


     if (op=='+'){
     r=n1+n2;
     printf("%d\n", r);
     }

     if
     (op=='-'){
     r=n1-n2;
     printf("%d\n", r);
     }

     if
     (op=='/'){
     r=n1/n2;
     printf("%d\n", r);
     }

    if
     (op=='*'){
     r=n1*n2;
     printf("%d\n", r);
     }



}
break;
}

}
while(choix!=0);
  system("PAUSE");
  return 0;
}
0

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

Posez votre question
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
6 févr. 2008 à 18:29
merci mype,

on s'est croisé dans nos messages...
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
6 févr. 2008 à 18:31
de rien ;)
si tu n'as plus de soucis n'oublies pas de metre en resolu
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
6 févr. 2008 à 18:34
au fait,
quand tu utilises des pointeurs, j'ai vu que tu avais retiré tous les "&" qui était dans les
scanf des fonctions et tu les as rajouté dans l'appel des fonctions (en case 1)...

Pourquoi?
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
6 févr. 2008 à 18:49
dans les scanf en faite c'est comme si tu écrivais scanf(" %c", &*op); comme j'utilise les pointeurs et comme & et * s'annule entre eux donc au lieu de metre &*op on peu metre seulement op pour faire plus propre

ensuite dans l'appel des fonctions je passe en parametre l'adresse de la variable op avec le & comme ça avec le pointeur de la fonction je vais pouvoir modifier la valeur de la variable du main dans la fonction

voila j'espere que j'ai été clair parce qu'il est est vrai que les pointeurs en C c'est pas tres simple...
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
6 févr. 2008 à 18:54
merci pour ta patience et tes explications mype...

Bonne soirée
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
6 févr. 2008 à 23:47
Salut,

Je sais le problème est résolu, mais je tenais à te dire :
Tu utilises les accolades dans tes "cases" de ton switch. Et tu as oublié de mettre des break ;)
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
6 févr. 2008 à 23:59
Salut,

merci de m'avoir fait cette remarque et c'est vrai que j'ai mis du temps pour m'en rendre compte...

Par hazard, tu n'aurai pas un site ou je peux trouver des exercices avec des fonctions pas trop compliqué pour commencer,
j'ai un peu dur avec celle-ci dans leurs utilisations...

Meric d'avance
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
7 févr. 2008 à 00:21
Euh non, pas d'exercice sous la main. Désolé
0