Prendre un char

Fermé
linquisiteur - 31 juil. 2013 à 14:57
 linquisiteur - 2 août 2013 à 23:28
Bonjour,

je tente de faire un simple programme qui prend un caractère et affiche sa décimale en ascii. Mon exercice me limite en nombre de ligne et donc je ne peux pas vider le buffer,.. je ne trouve pas la solution

#include <stdio.h>		
#include <stdlib.h>

int main(void){
char c ;
int i ;

puts( "Entrez un nombre sous forme hexadecimal" );

do{
scanf("%1s", &c);  //je n'ai droit que a 1 ligne ici
} while( (c>47 && c<58) || (c>64 && c<91) || (c>96 && c<123) );  // 1 ligne ici

if (!(c>47 && c<58)) i=c-87;  // Sa fonctionne mais sur papier j'ai 2 lignes de code pour le faire. Si vous avez une idée..

printf( "le caractere %c equivaut au nombre %d\n" , c , i ) ;
return EXIT_SUCCESS ;
}




Merci. PS j'aurais d'autre question si sa dérange pas

6 réponses

apprendreEtSeDevelopper Messages postés 65 Date d'inscription vendredi 22 juillet 2011 Statut Membre Dernière intervention 18 octobre 2013 6
31 juil. 2013 à 15:38
Salut, je ne comprends pas du tout ce que tu fais ici : if (!(c>47 && c<58)) i=c-87; qu'est-ce que 87 ?
De plus pour la compréhension de tous tu peux marquer 'a' pour le caractère ascii de a ext parce qu'on ne connais pas tous les équivalences ACSII :p
0
linquisiteur
31 juil. 2013 à 16:27
Salut, je ne comprends pas du tout ce que tu fais ici : if (!(c>47 && c<58)) i=c-87; qu'est-ce que 87 ?

De plus pour la compréhension de tous tu peux marquer 'a' pour le caractère ascii de a ext parce qu'on ne connais pas tous les équivalences ACSII :p

Je ne peux pas lire ton message sur le forum (bizarre) alors je le copie ici.

le: if (!(c>47 && c<58)) i=c-87; sert que si je n'ai pas un nombre entre 0 et 9 je retire -87 en décimale (ex 'a' = 97, 97-86 = 10 qui est la valeur hexa de a)
0
apprendreEtSeDevelopper Messages postés 65 Date d'inscription vendredi 22 juillet 2011 Statut Membre Dernière intervention 18 octobre 2013 6
31 juil. 2013 à 16:59
#include <stdio.h>		
#include <stdlib.h>

int main(void){
char c ;
int i;

puts( "Entrez un nombre sous forme hexadecimal" );

do{
scanf("%c", &c);
} while( !(c>='a' && c<='f') && !(c>='A' && c<='F') && !(c>='0' && c<='9') );

if (!(c>='0' && c<='9')) (c>='a' && c<='f')?i=c-('a' - 10):i=c-('A' - 10);
else i=c - '0';

printf( "le caractere %c equivaut au nombre %d\n" , c , i ) ;
system("pause");
return EXIT_SUCCESS ;
}


Voila, le programme marche mais je ne comprends vraiment pas la consigne xD
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 juil. 2013 à 22:04
@apprendreEtSeDevelopper,
Ca m'étonnerait que le programme fonctionne en l'état...
Tu utilises mal l'opérateur ternaire.
0
apprendreEtSeDevelopper Messages postés 65 Date d'inscription vendredi 22 juillet 2011 Statut Membre Dernière intervention 18 octobre 2013 6
1 août 2013 à 11:50
Qu'est-ce qui ne va pas dans mon opérateur ternaire?
Condition : (c>='a' && c<='f')
si TRUE : i=c-('a' - 10)
si FALSE : i=c-('A' - 10);

A l'exécution on obtient le résultat attendu...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
1 août 2013 à 15:25
Disons que ça ne s'utilise pas exactement comme ça. Et je suis surpris que ton compilateur ne gueule pas. Tu as oublié la ...
Il faut plutôt mettre :
i=(c>='a' && c<='f')?c-('a' - 10):c-('A' - 10);
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 juil. 2013 à 22:05
C'est quoi la consigne exacte ?
Quel est le nombre max de lignes que tu peux ? C'est toi qui as écrit le début du programme ou c'était imposé ?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
1 août 2013 à 14:26
Si j'ai bien compris, c'est un convertisseur de digit hexadécimal en valeur décimal.
de 0 à 9 tu retourne 0 à 9 (mais comme tu lis un caractère, il y a une conversion).
de A à F, tu retourner de 10 à 15.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
1 août 2013 à 14:57
Oui, j'ai compris ça aussi. Mais au vu de son post, il y a des contraintes supplémentaires (nombre de lignes max imposé ? parcelle de code obligatoire ?, , n'utiliser que des fonctions dont le prototype est défini dans stdio.h et stdlib.h, etc.)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 juil. 2013 à 22:09
Sinon, je propose :
#include <stdio.h>
#include <ctype.h>

int main(void){
    int c ;

    puts( "Entrez un nombre sous forme hexadecimal" );

    do{
        c=toupper(getchar());
    } while(c==EOF || ! ((c>='A' && c<='F') || (c>='0' && c<='9')) );

    printf( "le caractere %c equivaut au nombre %d\n" , c , c>'A'?c-'A':c-'0') ;
    getchar();
    return 0;
}

0
Merci pour toute vos réponse. J'ai envoyer mes réponse à la prof et je vais tester vos code ^_^
0