IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème d'alignement de caractères ASCII à l'affichage (console)


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Problème d'alignement de caractères ASCII à l'affichage (console)
    Bonjour,

    tout d'abord je vous souhaite d'excellentes fêtes de d'année.

    Je vous sollicite car j'ai un soucis en programmation en C. J'ai débuté cette année et j'ai trouvé beaucoup de réponse à mes questions sur ce forum, mais je bloque sur un problème d'affichage.
    Pour mon projet (qui est plus conséquent) je dois à un moment donné afficher des caractères ASCII.

    J'ai à ce stade un problème d'alignement de caractères. J'ai essayé différentes pistes : passer par une chaine de caractères, utiliser d'autre syntaxes dans mon printf , insérer des espaces ou des tabulations, mais j'ai toujours un décallage.

    Voici un bout de code qui permet de visualiser mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main ()
     
    {
     
    // exemple pour afficher un cœur suivi d'un carré
     
        printf("%c %c %c %c %c\n", 0x03, 0xDB, 0x03, 0xDB, 0x03); //♥ █ ♥ █ ♥
        printf("%c %c %c %c %c\n", 0xDB, 0xDB, 0xDB, 0xDB, 0xDB); //█ █ █ █ █
     
        return 0;
    }
    Quelqu'un aurait une idée ou une piste ? J'ai pas mal cherché mais rien trouver de vraiment parlant.
    Je voudrais être sur que chaque caractère soit aligné avec celui du dessous (je parcours un tableau dont j'affiche caque ligne/cellule)

    Merci pour votre aide ou vos idées.

    Antoine.

  2. #2
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 652
    Points : 1 669
    Points
    1 669
    Par défaut
    Hello,

    Quel est ton problème d'alignement ? Si j'exécute ton code, j'obtiens

    Nom : 0336.png
Affichages : 349
Taille : 332 octets

    Les caractères sont bien alignés verticalement.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 669
    Points
    10 669
    Par défaut
    Ton problème justement, c'est que ce ne sont pas des caractères ASCII ... ni même Unicode (mais je peux me tromper )

    0x03 pour 1 cœur, et 0xDB pour 1 carré, interroge toi quel charset tu utilises ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Hello,

    Quel est ton problème d'alignement ? Si j'exécute ton code, j'obtiens

    Nom : 0336.png
Affichages : 349
Taille : 332 octets

    Les caractères sont bien alignés verticalement.
    Bonjour,

    merci de m'avoir répondu. Mon programme est un pleu plus compliqué bien sûr, mais au final je me retrouve avec un décallage dès qu'un caratère autre est affiché. J'ai attaché la capture d'écran.

    Je ne sais pas comment cela se fait que de votre coté cela soit aligné, c'est exactement ce que je voudrais avoir.

    Merci.

    Nom : Capture d’écran 2022-12-23 194607.png
Affichages : 240
Taille : 12,1 Ko

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par foetus Voir le message
    Ton problème justement, c'est que ce ne sont pas des caractères ASCII ... ni même Unicode (mais je peux me tromper )

    0x03 pour 1 cœur, et 0xDB pour 1 carré, interroge toi quel charset tu utilises ?
    Bonjour,

    merci pour votre réponse mais je dois avouer que je sèche désolé.

    Dans mon code j'utilise des entiers non signés et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned int mur=177; 
    unsigned int soleil=15;
    unsigned int doublenote=14;
    unsigned int coeur=3;
    et plus tard j'affiche ma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%-*c", 2, board->cellule[ligne][col].type);
    sachant que le type me donne "(char) variable".

    Je n'utilise pas de fichiers; ni de lecture de clavier (c'est pour une jeu de memory).

    A quoi faisiez vous allusion ?

    Merci et désolé.

    Antoine

  6. #6
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 652
    Points : 1 669
    Points
    1 669
    Par défaut
    Je suis en console windows, code page 850 (commande chcp pour voir / changer le code page)

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 669
    Points
    10 669

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 668
    Points : 10 669
    Points
    10 669
    Par défaut
    Citation Envoyé par croquemais Voir le message
    mais au final je me retrouve avec un décallage dès qu'un caratère autre est affiché.
    D'après ce que je vois, c'est que le cœur rouge ne doit pas venir du charset

    Parce que si tu as 1 décalage, c'est parce que, à cause de ce cœur rouge, ta police n'est pas à chasse fixe : ce qui est 1 prérequis pour les polices console et IDE.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    joyeux Noel à toutes et à tous !

    Merci beaucoup pour les réponses, cela m'a permit de comprendre mieux certaines choses que j'avais survolé.

    Je m'aperçois qu'en fait notre programme mais que certains caractères ne s'affichent pas et provoque des décalages (gros ou petits). Je suis sur Windows, et nous devons utiliser le code page 850 (merci pour les epxlications). Les caractères que j'ai identifiés sont (en décimal) :
    7 : point
    8 : point blanc sur fonf noir
    9 : rond
    10 : rond blanc sur fond noi
    11 et 12 : signe masculins et féminin
    13 : note de musique simple
    14 : double note de musique
    15 : soleil
    27 : flèche vers la gauche
    127 : icone home
    176 : carre légèrement grisé

    Pas de chance j'en utilisé pas mal.

    J'ai essayé diverses options trouvé sur internet (SetConsoleOutputCP et setlocale) mais ca ne change rien.

    J'i cru comprendre que ce j'ai lu que cela peut s'expliquer, mais je n'ai pas compris s'il était possible de résoudre le problème.

    Si ce n'est pas abusé, si quelqu'un a une idée je seras prenaur.

    Encore merci.

  10. #10
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 652
    Points : 1 669
    Points
    1 669
    Par défaut
    Je ne sais pas où tu es aller chercher ces codes, mais ils ne correspondent pas à ce que tu écris.

    Par exemple,
    7: bell
    8: backspace
    9: tab
    27: escape

    voir ici: cp 850

    Edit 1: si tu exécutes ce programme, tu entendras une série de beepp dans tes hp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
     
    int main(void) {
    	for(int i=0;i<10;i++)
    		putchar(0x07);    // ou putchar(7) ou printf("%c",0x07);
     
    	return(0);
    }
    Edit 2: il est vrai que si, en mode console (cmd.exe) j'appuie sur Alt, qu'ensuite je tape 11, et qu'enfin je relache alt, j'ai bien le symbole masculin qui s'affiche. Mais je sais pas comment le reproduire à partir d'un programme. Mais 8 génère toujours un backspace.

  11. #11
    Membre expérimenté
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 639
    Points : 1 405
    Points
    1 405
    Par défaut
    Salut,

    Pour afficher ces symboles, le plus simple est de travailler en Unicode. Pour Windows ce sera l'UTF16 (wprintf...) avec au préalable l'instruction CRT _setmode(_fileno(stdout), _O_U16TEXT), nécessite d'inclure fcntl.h
    L'application charmap sera très utile pour récupérer les point de code.

    Si vous voulez absolument de l'OEM, il faut d'abord sélectionner une bonne police bitmap (raster, terminal), ensuite passer la console en mode binaire _setmode(_fileno(stdout), _O_BINARY) et enfin désactiver l’interprétation des caractères de contrôle avec l'api SetConsoleMode() (voir ENABLE_PROCESSED_OUTPUT). SetConsoleCursorPosition() sera probablement utile dans ce contexte.

Discussions similaires

  1. [TPW] Affichage des caractères Ascii 128 à 255
    Par dimi2 dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 26/03/2008, 09h55
  2. Réponses: 4
    Dernier message: 16/07/2007, 10h16
  3. Problème de caractères ASCII
    Par Gambit35 dans le forum Access
    Réponses: 2
    Dernier message: 23/05/2007, 09h16
  4. Réponses: 5
    Dernier message: 24/01/2007, 23h22
  5. Réponses: 5
    Dernier message: 03/08/2006, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo