Prendre un char

linquisiteur -  
 linquisiteur -
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   Statut Membre Dernière intervention   6
 
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
 
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   Statut Membre Dernière intervention   6
 
#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   Statut Contributeur Dernière intervention   1 846
 
@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   Statut Membre Dernière intervention   6
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Contributeur Dernière intervention   1 846
 
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
linquisiteur
 
Merci pour toute vos réponse. J'ai envoyer mes réponse à la prof et je vais tester vos code ^_^
0