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 11069 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 !!




1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   97
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   97
 
ok je vais tester tout ça. Merci !
0
musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   97
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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