Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INFOS CARACTÈRES ASCII/VALEURS POUR LA CONSOLE


Information sur la source

Catégorie :Chaîne de caractères Niveau : Débutant Date de création : 14/10/2004 Date de mise à jour : 14/10/2004 15:51:16 Vu : 8 274

Note :
2 / 10 - par 1 personne
2,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

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

  • /*
  • 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;
  • }
/*
  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).
 

Historique

14 octobre 2004 15:49:41 :
14 octobre 2004 15:51:16 :

Commentaires et avis

signaler à un administrateur
Commentaire de asmanur le 15/10/2004 07:29:58

J'au un peu regarder le code plusoeurs conseils:
-divise ton code en fonction pacre qu'utilisez des goto c bon pour le Basic mais pas pour le C++
-Si tu pouvais mettre un zip avec un exe ce serait plus pratique
Sinon j'ai pas eu le temps de tester a source.

signaler à un administrateur
Commentaire de BlackGoddess le 15/10/2004 09:33:39

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.

signaler à un administrateur
Commentaire de djl le 15/10/2004 10:48:35

+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

signaler à un administrateur
Commentaire de street_pc le 17/10/2004 14:59:11

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

signaler à un administrateur
Commentaire de djl le 18/10/2004 11:49:35

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

signaler à un administrateur
Commentaire de street_pc le 18/10/2004 18:34:23

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...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.