Calculatrice et fonction en C

Résolu
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Membre Dernière intervention   140
 
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   Statut Membre Dernière intervention   437
 
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   Statut Membre Dernière intervention   140
 
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   Statut Membre Dernière intervention   437
 
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   Statut Membre Dernière intervention   140
 
merci mype,

on s'est croisé dans nos messages...
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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   Statut Membre Dernière intervention   140
 
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   Statut Membre Dernière intervention   437
 
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   Statut Membre Dernière intervention   140
 
merci pour ta patience et tes explications mype...

Bonne soirée
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   140
 
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   Statut Contributeur Dernière intervention   1 846
 
Euh non, pas d'exercice sous la main. Désolé
0