Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction problématique

Sujet résolu
    26 octobre 2019 à 15:49:53

    Bonjour,

    je débute en C, et je sais maintenant l'efficacité de ce forum.

    Alors voilà, j'ai fait un programme qui contient une fonction appelée oon, destinée à savoir si la réponse à la question "Encore ??" (l. 35) et oui ou non.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <math.h>
    
    #define SIZE 100
    
    float conversion(float euros){
      float francs=euros*6.55957;
      return francs;
    }
    int oon(char string){
      char* pointeur=NULL;
    
      pointeur=strchr(string, 'u');
      if(pointeur==NULL){
        return 0;
      }
      else{
        return 1;
      }
    }
    
    void main(){
      float nbeuro=0;
      float nbfranc=0;
      char chaine[SIZE];
    
      do{
      printf("Combien d'euros voulez-vous convertir ?\n");
      scanf("%f", &nbeuro);
      nbfranc=conversion(nbeuro);
      printf("%f\n", nbfranc);
      printf("Encore ??\n");
      scanf("%s", chaine);
      }while(oon(chaine)!=0);
    }
    



    Mais lors de la compilation, je me retrouve avec un bon paquet de warnings, et une erreur de segmentation :

    fonctions.c: In function ‘oon’:
    fonctions.c:18:19: warning: passing argument 1 of ‘strchr’ makes pointer from integer without a cast [-Wint-conversion]
       pointeur=strchr(string, 'u');
                       ^~~~~~
    In file included from fonctions.c:5:0:
    /usr/include/string.h:231:14: note: expected ‘const char *’ but argument is of type ‘char’
     extern char *strchr (const char *__s, int __c)
                  ^~~~~~
    fonctions.c: In function ‘main’:
    fonctions.c:39:14: warning: passing argument 1 of ‘oon’ makes integer from pointer without a cast [-Wint-conversion]
       }while(oon(chaine)!=0);
                  ^~~~~~
    fonctions.c:15:5: note: expected ‘char’ but argument is of type ‘char *’
     int oon(char string){
         ^~~

    Combien d'euros voulez-vous convertir ?
    1
    6.559570
    Encore ??
    oui
    Segmentation fault (core dumped)
    


    Merci à l'avance pour vos réponses jusque là souvent pertinantes.

    -
    Edité par alexpatt 26 octobre 2019 à 15:51:34

    • Partager sur Facebook
    • Partager sur Twitter
      26 octobre 2019 à 19:28:35

      Comme quoi, il faut bien lire les warnings car la réponse est là:

      fonctions.c:15:5: note: expected ‘char’ but argument is of type ‘char *’
       int oon(char string){



      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2019 à 12:23:43

        Et quelle est la réponse stp ?

        C'est parce que je ne la trouve pas que je me suis adressé au forum.

        • Partager sur Facebook
        • Partager sur Twitter
          3 novembre 2019 à 12:42:08

          Le warning dis qu'il attend un argument de type 'char', c'est-à-dire un caractère, et que tu lui as passé un argument de type 'char *', donc probablement une chaîne de caractères. L'erreur est donc soit à la définition de la fonction, soit à l'appel de la fonction.

          Voyons la définition de la fonction :

          int oon(char string)

          Le paramètre 'string' est un caractère, donc cette fonction admet en argument un caractère. Pas une chaîne de caractères : un caractère.

          Voyons l'appel de la fonction :

            char chaine[SIZE];
            /* ... ... ... */
            }while(oon(chaine)!=0);

          Effectivement, tu as appelé la fonction avec une chaîne de caractères, c'est incompatible avec sa définition.

          Que faut-il corriger, la définition ou l'appel ? (Indice : il y a une variable qui s'appelle 'string'...)

          • Partager sur Facebook
          • Partager sur Twitter
            3 novembre 2019 à 13:43:25

            robun a écrit:

            Le warning dis qu'il attend un argument de type 'char', c'est-à-dire un caractère, et que tu lui as passé un argument de type 'char *', donc probablement une chaîne de caractères. L'erreur est donc soit à la définition de la fonction, soit à l'appel de la fonction.

            Voyons la définition de la fonction :

            int oon(char string)

            Le paramètre 'string' est un caractère, donc cette fonction admet en argument un caractère. Pas une chaîne de caractères : un caractère.

            Voyons l'appel de la fonction :

              char chaine[SIZE];
              /* ... ... ... */
              }while(oon(chaine)!=0);

            Effectivement, tu as appelé la fonction avec une chaîne de caractères, c'est incompatible avec sa définition.

            Que faut-il corriger, la définition ou l'appel ? (Indice : il y a une variable qui s'appelle 'string'...)

            Pas mieux  ;-)

            • Partager sur Facebook
            • Partager sur Twitter
              18 novembre 2019 à 17:51:29

              Merci robun,

              Problème résolu.

              • Partager sur Facebook
              • Partager sur Twitter

              Fonction problématique

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown