Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction

erreur avec la fonction chiffre

Sujet résolu
    13 juillet 2018 à 12:45:26

    Bonjour, j'ai écris ce bout de code pour un cours d'oc. Lorsque je veux compiler code::blocks me signale une erreur au niveau de caractere = chiffre(int x). Pouvez vous me donner des explications, voici le code:

    #include <stdio.h>
    #include <stdlib.h>
    
    char chiffre(int x);
    
    int main(int argc, char *argv[])
    {
        int x = 0;
        char caractere = 0;
    
        scanf("%d", &x);
    
        if(x>9)
        {
          caractere = chiffre(int x);
          printf("%c", caractere);
        }
        else{
        printf("%d",x);
        }
        return 0;
    }
    
    
    char chiffre(int x)
    {
     char carac = 0;
    
        switch(x)
        {
        case 10:
            carac =  'A';
            break;
        case 11:
            carac = 'B';
            break;
        case 12:
            carac = 'C';
            break;
        case 13:
            carac = 'D';
            break;
        case 14:
            carac = 'E';
            break;
        case 15:
            carac = 'F';
            break;
        default:
            printf("write n < 16");
            break;
        }
    
     return carac;
    }



    Merci d'avance, Fab

    -
    Edité par Kasewa 13 juillet 2018 à 12:45:57

    • Partager sur Facebook
    • Partager sur Twitter
      13 juillet 2018 à 13:26:38

      Hello,

      Ligne 15: pas de spécificateur de type lors de l'appel de la fonction: caractere=chiffre(x);

      PS: il y a plus simple pour convertir 10, 11 etc en lettre:

      if(x>9 && x<16) {
          caractere='A'+x-10;
      }



      -
      Edité par edgarjacobs 13 juillet 2018 à 13:27:34

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        13 juillet 2018 à 14:10:17

        Merci Edgar, c'est une bonne alternative ce que tu proposes, je vais l'utiliser. Je ne comprends pas pourquoi on ne peut pas spécifier les types pour les paramètres, il y a une explication? Une autre question, est que les cast sont déconseillés directement à l'intérieur des parenthèses?

        -
        Edité par Kasewa 13 juillet 2018 à 14:21:21

        • Partager sur Facebook
        • Partager sur Twitter
          13 juillet 2018 à 14:40:15

          Kasewa a écrit:

          Je ne comprends pas pourquoi on ne peut pas spécifier les types pour les paramètres, il y a une explication? Une autre question, est que les cast sont déconseillés directement à l'intérieur des parenthèses?

          On ne peut pas spécifier les types des paramètres effectifs car tout est déjà connu:
          1. Le type du paramètre formel grâce au prototype de la fonction appelée
          2. Le type de la valeur passée, car en C toute valeur, variable et expression, a un type (le type de x est int déclaré ligne 8 dans ton cas).
          Donc ça compliquerait inutilement la grammaire du langage de permettre de spéficier le type du paramètres (quel type d'ailleurs, celui du paramètre effectif ou celui du paramètre formel?)

          Cela dit, concernant le paramètre effectif, il existe l'opérateur de conversion de type que l'on peut utiliser dans les expressions.

          caractere = chiffre((int)x);

          Mais les conversions de type sont un signe de conception ratée, donc elles sont généralement mal vues, peu importe où.


          -
          Edité par Marc Mongenet 13 juillet 2018 à 14:41:16

          • Partager sur Facebook
          • Partager sur Twitter

          Fonction

          × 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