IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

[Debutant - 1er jour de C] Typedef enum


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 30
    Par défaut [Debutant - 1er jour de C] Typedef enum
    Bonjour à tous,

    Je commence le C donc désolé d'avance pour cette question

    J'ai créé un petit programme de test et tout fonctionne parfaitement, mais j'aurais aimé que dans mon message de fin il y ait le nom du mois qui s'affiche au lieu de l'index.
    Bien sûr je sais le faire en virant l'enum, mais je tiens à savoir comment faire en le gardant? Est-ce possible?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <stdio.h>
     
    int main(void)
    {
      typedef enum {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec} Month;
     
      typedef struct rainmonth
      {
        Month month;
        unsigned int rain;
      }RainMonth;
     
      unsigned int i;
      RainMonth maxmonth = {0};
      const RainMonth rainfall[12] = {{Jan,23}, {Feb,19}, {Mar,27}, {Apr,38}, {May,33}, {Jun,24}, {Jul,20}, {Aug,18}, {Sep,26}, {Oct,30}, {Nov,26}, {Dec,22}};
     
      for(i=0;i<12;i++)
      {
        if(rainfall[i].rain>maxmonth.rain)
        {
          maxmonth.month = rainfall[i].month;  
          maxmonth.rain = rainfall[i].rain; 
        }
      }                           
     
      printf("The month with the maximum rainfall is the month of %d with a rainfall of %u\n", maxmonth.month, maxmonth.rain);
     
      printf("\nPress ENTER to exit...");
      getchar();
      return 0;
    }
    Output: The month with the maximum rainfall is the month of 3 with a rainfall of 38

    Or je voudrais que ca affiche Apr au lieu de 3
    J'ai essayé en mettant %s au lieu du %d mais ca plante

    Par ailleurs, si vous avez d'autres remarques n'hésitez pas!
    Merci d'avance,
    Romain

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut Re: [Debutant - 1er jour de C] Typedef enum
    Citation Envoyé par kakou
    Output: The month with the maximum rainfall is the month of 3 with a rainfall of 38

    Or je voudrais que ca affiche Apr au lieu de 3
    J'ai essayé en mettant %s au lieu du %d mais ca plante

    Par ailleurs, si vous avez d'autres remarques n'hésitez pas!
    Merci d'avance,
    Romain
    C'est plutôt 4 ou alors Mar que tu veux, non?

    Pour répondre à ta question, tu ne peux pas le faire avec un enum, ce ne sont que des index...

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: [Debutant - 1er jour de C] Typedef enum
    Citation Envoyé par kakou
    J'ai créé un petit programme de test et tout fonctionne parfaitement, mais j'aurais aimé que dans mon message de fin il y ait le nom du mois qui s'affiche au lieu de l'index.
    strftime()
    Bien sûr je sais le faire en virant l'enum, mais je tiens à savoir comment faire en le gardant? Est-ce possible?

    Or je voudrais que ca affiche Apr au lieu de 3
    Il n'y a pas de moyen direct pour transformer un enum en texte. Par contre, à l'aide d'un fichier intermédiaire unique et et de macros simples et astucieuses, on peut automatiser la production d'un enum et d'un tableau de chaines correspondant.

    Regarder par exemple ici :

    le fichier intermédiaire définissant des codes d'erreurs avec un texte :

    http://emmanuel-delahaye.developpez....c/farr_err.itm

    Création d'un enum farr_err_e qui défini les codes d'erreur à l'aide du fichier intermédiaire :

    http://emmanuel-delahaye.developpez..../ed/inc/farr.h

    Création d'une fonction farr_serr() retournant une chaine 'erreur' en fonction du code d'erreur :

    http://emmanuel-delahaye.developpez..../ed/src/farr.c

    L'ajout d'une ligne dans le fichier .itm et la recompilation produit automatiquement le nouveau code. (un enum de plus, une chaine en plus)

    Bon, c'est une utilisation un petit peu avancée du langage C et du préprocesseur, mais ça peut aider, surtout sur des projets avec des centaines de paramètres... (enums, chaines, elements de structures etc.) Faire bosser la machine à ma place, ça me va...

  4. #4
    Membre averti
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 30
    Par défaut
    Ouh la tu vas trop vite pour moi, je ne suis pas encore passé au chapitre des arguments :p
    Mais je vais quand meme tenter d'implémenter cette fonction, ca devrait pas être si compliquée

    Merci pour les réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macros et typedef enum {MUR=0x1,etc. HELP !
    Par qwerty999 dans le forum C++
    Réponses: 2
    Dernier message: 07/06/2006, 22h44
  2. Réponses: 2
    Dernier message: 26/01/2006, 13h14
  3. [SQL][debutant]le jour où xxx à le plus d'activité
    Par goussepi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/12/2005, 13h52
  4. Obtenir le 1er jour du mois d'une date
    Par soso78 dans le forum Access
    Réponses: 4
    Dernier message: 27/09/2005, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo