Infos caractères ascii/valeurs pour la console

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 457 fois - Téléchargée 34 fois

Contenu du snippet

Le plus simple est d'écrire le menu:
1. Voir le tableau ASCII Console/MS-DOS
2. Entrer un caractère pour connaître son code ASCII
3. Entrez un code hexa pour voir le caractère correspondant
4. Entrez un code décimal pour voir le caractère correspondant
5. Conseil - A propos de...

Source / Exemple :


/*
  Name: SPECHAR
  Version: 0.2
  Copyright: --
  Author: Adrien Lavoillotte
  Date: 19/02/04 15:55
  Description: quelques petits trucs pratique pour la programmation console en C/C++

  • /
/*
  • new versions of conio:
must have this in conio.h: typedef enum { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE } COLORS;
  • /
//#include <stdlib.h> //system #include <iostream> //cin, cout #include <iomanip> //setw, setfill #include <stdio.h> //fprint, fopen, FILE*, kbhit, fflush #include <conio.c> //getchar, clrscr, textcolor, getch //couleurs dont on se sert: cf conio.h #include <unistd.h> using namespace std; typedef unsigned char BYTE; int main(int argc, char *argv[]) { char cChoice=0; BYTE cCaract = (BYTE) 0; printMenu: clrscr(); textcolor(LIGHTGREEN); //réinitialisation nécessaire en cas de multiples opérations //sinon on ne peut plus quitter: cChoice=0; cCaract = (BYTE) 0; cout << " SPECHAR v.0.1 " << endl << "1. Voir tableau ASCII Console/MS-DOS" << endl << "2. Entrer un caract" << '\x8a' << "re pour obtenir son code ASCII" << endl << "3. Entrer un code ASCII hexa pour obtenir le caract" << '\x8a' << "re." << endl << "4. Entrer un code ASCII d" << '\x82' << "cimal pour obtenir le caract" << '\x8a' << "re." << endl << "5. Conseils - A propos de..." << endl << "Autre: quitter." << endl; textcolor(LIGHTBLUE); cout << "Votre choix: "; //anciennement: scanf("%u", &cChoice); cChoice = getch(); fflush(stdin); clrscr(); if(cChoice < 49 || cChoice > 53) // de '1' à '5' return 0; switch(cChoice) { //tableau ASCII case '1': textcolor(LIGHTGREEN); cout << noshowbase << "Table des caract" << '\x8a' << "res 0-127:" << endl; for(unsigned int i=0; i<128; i++) { cout << (char) i << " " << dec << setfill('0') << setw(3) << i << " " << hex << setw(2) << i; if(((i+1)%8)==0) cout << endl; else cout << " "; } getchar(); fflush(stdin); clrscr(); cout << "Table des caract" << '\x8a' << "res 128-255:" << endl; for(unsigned int i=128; i<256; i++) { cout << (char) i << " " << dec << setfill('0') << setw(3) << i << " " << hex << setw(2) << i; if(((i-127)%8)==0) cout << endl; else cout << " "; } break; //Caractère => ASCII hex & dec case '2': textcolor(LIGHTBLUE); cout << "Caract" << '\x8a' << "re recherch" << '\x82' << ": "; //anciennement scanf("%c", &cCaract); //ne permettait pas 'entrée', 'droite', etc... cCaract = getch(); textcolor(LIGHTGREEN); cout << endl << "Correspondance console/MS-DOS ASCII: " << endl << " d" << '\x82' << "cimale: " << dec << (int) cCaract << endl << " hexad" << '\x82' << "cimale: " << hex << showbase << (int) cCaract << endl; cCaract = 0; break; //hex => Caract. case '3': textcolor(LIGHTBLUE); cout << "Valeur ASCII hexad" << '\x82' << "cimale (2 chiffres hexa en minuscules, sans le '0x'): "; scanf("%hx", &cCaract); textcolor(LIGHTGREEN); cout << "Correspondance console/MS-DOS caract" << '\x8a' << "re: " << cCaract << endl; break; //dec => Caract. case '4': textcolor(LIGHTBLUE); cout << "Valeur ASCII d" << '\x82' << "cimale: "; scanf("%hu", &cCaract); textcolor(LIGHTGREEN); cout << "Correspondance console/MS-DOS caract" << '\x8a' << "re: " << cCaract << endl; break; //Conseil, à propos de... case '5': textcolor(LIGHTGREEN); cout << "2 fa" << '\x87' << "ons principales d'utiliser ces correspondance pour " << "obtenir les accents en mode console dans vos programmes C/C++:" << endl; textcolor(LIGHTGRAY); cout << "cout << \"lettre accentu\\x82\" << \"e...\"; " << endl << "printf(\"lettre accentu%ce...\", '\\x82'); "; textcolor(LIGHTGREEN); cout << endl << endl << "SPECHAR version 0.1" << endl << " par Adrien Lavoillotte (streetpc at free.fr)" << endl << endl << "Vous pouvez utiliser, modifier, distribuer ce programme " << '\x85' << " vos risques et perils ;-)"; break; default: //normalement jamais atteind ;-) textcolor(RED); cout << "oops..."; getchar(); return 0; } fflush(stdin); getchar(); goto printMenu; return 0; }

Conclusion :


ATTENTION: le menu n'attends pas qu'on frappe entrée (getch).

A voir également

Ajouter un commentaire

Commentaires

Messages postés
9
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
18 octobre 2004

Merci pour toutes ces précisions, je retindrai quand j'aurai besoin d'un code portable.
En attendant, les puristes peuvent toujours refaire ce code de façon portable et aux normes, toute belle, sans erreurs, etc.
Prévenez-moi si vous déposez une meilleur source du même programme, que je supprime celle-ci...
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
ce qu'il faut comprendre c'est que les données d'un flux d'entré sont faites pour etre lues, donc vider le tampon associé c'est forcement une erreur de logique, d'autant plus que le standard ne definie aucun mode de bufferisation donc tu ne peux pas savoir a priori ce que tu vides, ce que tu perds

while( (c = fgetc( stdin )) != EOF && c != '\n' ); est une solution portable pour sauter tous les caracteres lu jusqu'a un '\n'


pour les saisie, le meilleur moyen de tout lire en sécurité est fgets + tableau + sizeof
Messages postés
9
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
18 octobre 2004

ce code n'a aucune prétention en tant que source.
je l'ai codé à l'arrache en tant qu'utilitaire pour développeurs Dev-Cpp ou Borland sous Windows, je sais qu'il n' aucune portabilité, qu'il ne respecte aucune norme, etc.
mes programmes qui respectent une norme sont ceux que je fais en cours.
pour le zip, je ne préfère pas proposer un zip avec un exe comme je le faisais avant (manque justifié de confiace).

pour ceux qui veulent reprendre le code pour le rendre protable et aux normes, c'est avec plaisir que je remplacerai ce code par le leur (en indiquant leur nom bien sur) ou que je suprimerai celui-ci dès qu'un équivalent bien codé sera proposé sur cppfrance.

[BlackGoddess]
fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.
/BlackGoddess
exprime-toi plus clairement car il ne s'agit pas dune faute de logique. il n'a peut-être rien à faire ici mais il était bien pratique après un scanf("%c", ...) :D
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
+1

pour les i/o c et c++, c'est dangereux et encore heureux que c'est synchros par defaut d'apres le standard, mais ca faut le savoir


//anciennement: scanf("%u", &cChoice);
cChoice = getch();
fflush(stdin);

en fait ya plusieurs erreurs de logique la, scanf et getch n'ont strictement rien a voir, getch lit le clavier et scanf stdin, et un fflush(stdin) apres un getch() n'a aucun sens

fflush(stdin) n'a aucune portabilité et est tres dangereux, le standard ne defini pas de comportement lorsque fflush recoit un flux d'entrée


on inclus jamais un .c, c'est anti productif

unsigned char c'est un entier non signé en c, pas la peine de caster inutilement
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

du C avec des cout :o

je crois que conio.c n'est pas portable, et n'existe pas sur tout les compilo win.

sinon, il est mauvais de melanger les flux d'e/s du C et ceux du C++ (ils n'ont pas le meme fonctionnement interne, il faut s'attendre a des surprises ...)

fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.