Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/05/2019, à 21:58

chris7522

[RESOLU] Ou est ce que ca coince ? (C)

bonjour a toutes et a tous ,
Apres avoir ecrit ce code , j'ai ce message que je n'arrive pas a déchiffrer . Pouvez vous m'aider s'il vous plait .

 

#include <stdio.h>
 float addition(float a, float b);
 float soustraction(float c, float d);
 float multiplication(float e, float f);
 float division(float g, float h);

 int main()
 {
    char choix;
    float a, b, c, d, e, f, g, h;
    float result_add, result_sous, result_mult, result_div;
    
    puts("Veuillez faire votre choix");
    puts("Pour une addition , tapez : a");
    puts("Pour une soustraction , tapez : b");
    puts("Pour une multiplication , tapez : c");
    puts("Pour une division , tapez : d"); 
    scanf("%f", &choix);
 
    switch(choix)
    {
       case 'a':
          puts("Vous avez choisis l'addition");
          printf("Veuillez taper le 1er chiffre :\n");
          scanf("%f", &a);
          printf("Veuillez taper le 2eme chiffre :\n");
          scanf("%f", &b);
          result_add = addition(a, b);
          printf("Le resultat est : %.1f\n", result_add);
       case 'b':
          puts("Vous avez choisis la soustraction");
          printf("veuillez taper le 1er chiffre :\n");
          scanf("%f", &c);
          printf("Veuillez taper le 2 eme chiffre :\n");
          scanf("%f", &d);
          result_sous = soustraction(c, d);
          printf("Le resultat est : %.1f\n", result_sous);
       case 'c':
          puts("Vous avez choisis la multiplication");
          puts("Veuillez taper le 1er chiffre :");
          scanf("%f", &e);
          puts("Veuillez taper le 2eme chiffre :");
          scanf("%f", &f);
          result_mult = multiplication(e, f);
          printf("Le resultat est : %.1f\n", result_mult);
       case 'd':
          puts("Vous avez choisis la division");
          puts("Veuillez taper le 1er numero");
          scanf("%f", &g);
          puts("Veuillez taper le 2eme chiffre :");
          scanf("%f", &h);
          result_div = division(g, h);
        default :
          puts("Vous vous etes trompé de lettre");

        return 0;
     }
 }

     float addition(float a, float b)
     {
        return a + b;
     }
     float soustaction(float c, float d)
     {
        return c - d;
     }
     float multiplication(float e, float f)
     {
        return e * f;
     }
     float division(float g, float h)
     {
        return g / h;
     }

Et le message est le suivant :
   

$gcc operateur.c -o operateurCompile
/usr/bin/ld: /tmp/ccvixPfP.o: in function `main':
operateur.c:(.text+0x171): undefined reference to `soustraction'
collect2: error: ld returned 1 exit status

Dernière modification par chris7522 (Le 16/05/2019, à 04:46)

Hors ligne

#2 Le 11/05/2019, à 22:15

Nuliel

Re : [RESOLU] Ou est ce que ca coince ? (C)

parce soustaction prendrait bien un r smile

Dernière modification par Nuliel (Le 11/05/2019, à 22:15)

Hors ligne

#3 Le 12/05/2019, à 07:45

pingouinux

Re : [RESOLU] Ou est ce que ca coince ? (C)

Bonjour,
Il faut aussi corriger la ligne n° 18 :

    scanf("%c", &choix);

et ajouter l'instruction break; à la fin de chaque bloc case.

Tu peux aussi regrouper les lectures des opérandes en un seul endroit :

#include <stdio.h>
 float addition(float a, float b);
 float soustraction(float c, float d);
 float multiplication(float e, float f);
 float division(float g, float h);

 float operation(float ope(float,float)) {
       float a, b;
       printf("veuillez taper les 2 nombres :\n");
       scanf("%f %f", &a, &b);
       return ope(a, b);
 };

 int main()
 {
    char choix;
    float result;
    
    puts("Veuillez faire votre choix");
    puts("Pour une addition , tapez : a");
    puts("Pour une soustraction , tapez : b");
    puts("Pour une multiplication , tapez : c");
    puts("Pour une division , tapez : d"); 
    scanf("%c", &choix);
 
    switch(choix)
    {
       case 'a':
          puts("Vous avez choisi l'addition");
          result = operation(addition);
          break;
       case 'b':
          puts("Vous avez choisi la soustraction");
          result = operation(soustraction);
          break;
       case 'c':
          puts("Vous avez choisi la multiplication");
          result = operation(multiplication);
          break;
       case 'd':
          puts("Vous avez choisi la division");
          result = operation(division);
          break;
        default :
          puts("Vous vous etes trompé de lettre");
          return 1;

     }
     printf("Le resultat est : %.1f\n", result);
 }

     float addition(float a, float b)
     {
        return a + b;
     }
     float soustraction(float c, float d)
     {
        return c - d;
     }
     float multiplication(float e, float f)
     {
        return e * f;
     }
     float division(float g, float h)
     {
        return g / h;
     }

Hors ligne

#4 Le 12/05/2019, à 16:32

chris7522

Re : [RESOLU] Ou est ce que ca coince ? (C)

Merci beaucoup a tous les deux d'avoir prit le temps de me repondre . J'ai deja des questions a poser car je n'ai pas tout compris , mais malheureusement je n'ai pas le temps ce soir . Bonne soirée

Hors ligne

#5 Le 13/05/2019, à 15:43

chris7522

Re : [RESOLU] Ou est ce que ca coince ? (C)

1 )
Dans le bloc case , l'appel de fonction " result = operation(soustraction) "par exemple , envoie a la fonction soustraction, le resultat du scanf de la fonction operation en argument , qui est stocké ensuite dans la variable result ?
  2 )
A quoi sert le float ope dans la fonction operation ?
  3 )
Il est possible donc de mettre des fonctions avant le main et d'autre a la fin de celui-ci ?

Hors ligne

#6 Le 13/05/2019, à 15:59

NicoApi73

Re : [RESOLU] Ou est ce que ca coince ? (C)

Bonjour,

1) tu passes en argument une fonction et le retour de operation est un float mis dans result
Le scanf est géré dans la fonction operation

2) C'est la déclaration de la fonction prise en argument qui retourne un float

3) Le code des fonctions oui, leur déclaration doit être faite avant.
Tu peux même écrire le code des fonctions dans un autre fichier (par contre les déclarations doivent toujours être faites avant).

Hors ligne

#7 Le 13/05/2019, à 16:41

pingouinux

Re : [RESOLU] Ou est ce que ca coince ? (C)

Tu peux encore simplifier l'écriture :

#include <stdio.h>

 float addition      (float a, float b) { return a + b; }
 float soustraction  (float c, float d) { return c - d; }
 float multiplication(float e, float f) { return e * f; }
 float division      (float g, float h) { return g / h; }

 float operation(float ope(float,float)) {
       float a, b;
       printf("veuillez taper les 2 nombres :\n");
       scanf("%f %f", &a, &b);
       return ope(a, b);
 };

 int main()
 {
    char choix;
    float result;
    
    puts("Veuillez faire votre choix : + - * /");
    scanf("%c", &choix);
 
    switch(choix)
    {
       case '+':
          puts("Vous avez choisi l'addition");
          result = operation(addition);
          break;
       case '-':
          puts("Vous avez choisi la soustraction");
          result = operation(soustraction);
          break;
       case '*':
          puts("Vous avez choisi la multiplication");
          result = operation(multiplication);
          break;
       case '/':
          puts("Vous avez choisi la division");
          result = operation(division);
          break;
        default :
          puts("Vous vous etes trompé de lettre");
          return 1;

     }
     printf("Le resultat est : %.1f\n", result);
 }

Hors ligne

#8 Le 14/05/2019, à 14:36

chris7522

Re : [RESOLU] Ou est ce que ca coince ? (C)

Merci beaucoup . Le code est simplifié au maximum , quel gain de temps !
Du coup , "  float addition      (float a, float b) { return a + b; }  "  est le prototype de la fonction ou la fonction elle meme ?

Dernière modification par chris7522 (Le 14/05/2019, à 14:39)

Hors ligne

#9 Le 14/05/2019, à 16:06

pingouinux

Re : [RESOLU] Ou est ce que ca coince ? (C)

chris7522 a écrit :

Du coup , "  float addition      (float a, float b) { return a + b; }  "  est le prototype de la fonction ou la fonction elle meme ?

C'est la fonction elle-même, définie en tête du fichier, qui n'a donc plus besoin de prototype.

Hors ligne

#10 Le 15/05/2019, à 13:57

chris7522

Re : [RESOLU] Ou est ce que ca coince ? (C)

bonjour ,
Du coup , pas besoin dans les fonction d'en tete , de declarer les variables : a,b,c,d,e,f,g,h ?

Hors ligne