C : Expression avec espaces et union

Résolu
musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai défini des structures :

enum typeElement { CHIFFRE , LETTRE};
union donneeElement
{
    float chiffre;
    char lettre;
};

struct Element
{
    enum typeElement type;
    union donneeElement donnee;
};


Maintenant, j'aimerais que l'utilisateur entre une expression (ex : "benjamin a 32 bonbons"), et que pour chaque caractère, il me dise s'il s'agit d'un chiffre ou d'une lettre...

J'ai donc 2 problèmes : l'entrée de l'expression, car scanf ne prend pas en compte ce qu'il y a après les espaces, et le fait qu'il m'affiche le type CHIFFRE ou LETTRE à chaque fois. Je ne vois pas du tout comment faire.

Je vous remercie de votre aide !!



--
"L'avantage d'être intelligent, c'est qu'on peut toujours faire l'imbécile, alors que l'inverse est totalement impossible" Woody Allen

1 réponse

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Le mieux est de lire avec fgetc puisque tu dis "par caractère".
    Ensuite, pour chaque caractère lu, tu regardes sa valeur. Si c'est compris entre '0' et '9' alors c'est un chiffre, sinon si c'est compris entre 'a' et 'z' (pareil pour les majuscules) alors c'est une lettre.
    Cdlt,
    0
    1. musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   106
       
      Merci pour cette réponse.
      Mais pour lire la valeur du caractère, je n'utilise pas mes structures... Si?
      Et comment je regarde si c'est compris entre a et z ? avec leur valeur ascii ?
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ben, je ne vois vraiment pas l'intérêt de tes structures.
      Avec la façon que je t'ai donnée, tu en as pas besoin.
      Sinon pour regarder si c'est compris entre 'a' et 'z' c'est la valeur ascii.
      Par exemple : car=fgetc(...); if (car>='a' && car <='z') ...
      0
    3. musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   106
       
      ok je vais tester tout ça. Merci !
      0
    4. musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   106
       
      Ca marche très, très bien !! =)

      aussi, si j'ai ma phrase "benjamin a 9 bonbons".
      Est-il possible de créer un flottant qui prenne la valeur 9 ?
      Parce que du coup, j'ai un char, et je voudrais un float...

      Merci encore !!
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Oui tu peux, ton nombre est forcément entre '0' et '9', il s'agit donc d'un entier. Tu peux donc le convertir en entier en lui soustrayant '0' et il se convertira en float tout seul.
      Par exemple : tu as le caractère '9'.
      Si tu fais : float a='9'-'0'; tu obtiendras a=9.0f.
      Cdlt,
      0