C : Expression avec espaces et union

Résolu/Fermé
musicetcie Messages postés 391 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 24 mars 2013 - 27 mars 2011 à 15:41
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 27 mars 2011 à 16:59
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
27 mars 2011 à 15:45
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 391 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 24 mars 2013 97
27 mars 2011 à 15:51
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
27 mars 2011 à 15:57
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 391 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 24 mars 2013 97
27 mars 2011 à 16:00
ok je vais tester tout ça. Merci !
0
musicetcie Messages postés 391 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 24 mars 2013 97
27 mars 2011 à 16:56
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
27 mars 2011 à 16:59
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