[Résolu][Langage C]Affichage de caracteres particuliers

Salut la zone!

Je travaille en C sous linux et j'aimerai utiliser certains caractères que je sais existants... mais je ne les trouve pas. Il s'agit d'un programme de jeu de carte en mode console, et j'aimerai pouvoir afficher les caracteres pique, coeur, carreau et trèfle.

Note: j’ai déjà essayé de les trouver, sans succès en utilisant le petit programme suivant :
[codebox]#include <stdio.h>

int main(void)
{
char c = 0;

while (getchar())
{
printf("%d : %c\n", (int)c, c++);
}

return 0;
}
[/codebox]

ca depend completement du charset que tu utilises quand tu lance ton programme C.

Et la, bonjour l’angoisse.

LoneWolf
iso et utf sont dans un bateau… B)

Si ca peut aider (aucune idée de la pertinence du truc, au mieux ca donne une idée, au pire t’auras perdu 30 secondes)

http://www.tableascii.com/ -> ctrl-f -> club suit symbol

Pour l’unicode, c’est ici : http://www.unicode.org/charts/PDF/U2600.pdf

grace au petit programme qui suit :

[code]#include <stdio.h>

main()
{
char c;

  for (c=0;c<=20;c++)
	  printf("%i -> %c\n", c, c);
  
  getch();

}[/code]

j’ai trouvé ça :

[code]0 →
1 → :relaxed:
2 → :slight_smile:
3 → :heart:
4 → :diamonds:
5 → :clubs:
6 → :spades:
7 →
8 →
9 →
10 →

11 → ♂
12 → ♀
13 →
14 → ♫
15 → ☼
16 → ►
17 → ◄
18 → :arrow_up_down:
19 → :bangbang:
20 → ¶[/code]

pour résumer, on aura :
Coeur → 0x03
Carreau → 0x04
Trèfle → 0x05
Pique → 0x06

Je précise que c’est compilé avec Dev-C++, sous windows XP, alors est-ce que c’est équivalent ou non sous linux → ???

Non. C’est l’affichage stupide de windows des codes de controles.

LoneWolf
On appelle ca de la programmation empirique B)

[quote]Non. C’est l’affichage stupide de windows des codes de controles.

LoneWolf
On appelle ca de la programmation empirique B)[/quote]

woups, bah ça m’apprendra à vouloir faire mon malin B)
en tout cas perso, je dormirai moins c** !

Bon en fait j’ai essayé avec plusieurs encodages pour la console, ça n’a rien donné. Je me suis demandé si les fonts de ma console possédaient lesdits caracteres et taucune de celle que j’ai essayé n’a donné quelqu chose. Je ne désespère pas mais là tout de suite je ne sais pas trop quoi faire, et savoir où ils se trouvent dans la table ascii ne m’avance pas énormément (merci qd même), quelqu’un connait-il une librairie particulière d’affichage de texte? (rêvons, voire un truc qui fait de la couleur sous konsole et tout)

LoneWolf -> tu peux préciser pour le charset… je ne suis pas au point sur ces subtilités…

Pour te donner un aperçu du bordel des console fonts sous nunux, tu as ce petit texte intéressant à lire : Into the Mist: How Linux Console Fonts Work .

Je sais pas si ton cas particulier est possible mais pour faire des “interfaces texte”, la lib “ncurses” est vraiment pas mal et super bien documente sous linux (man curses ou ncurses je sais plus)

Reste a savoir si les caracteres que tu cherches sont dispo (et la, j’ai un peu la flemme de chercher B))

LoneWolf
c’est qu’il est tot B)

[quote=“LoneWolf, post:10, topic: 45420”]Je sais pas si ton cas particulier est possible mais pour faire des “interfaces texte”, la lib “ncurses” est vraiment pas mal et super bien documente sous linux (man curses ou ncurses je sais plus)

Reste a savoir si les caracteres que tu cherches sont dispo (et la, j’ai un peu la flemme de chercher :D)[/quote]

Ok, merci, je vais regarder ça. B)

[quote=“LoneWolf, post:10, topic: 45420”]LoneWolf
c’est qu’il est tot B)[/quote]

Ouep, mais j’étais même pas encore couché à cette heure là.

Finalement j’ai copié collé les caractères qui m’interessaient dansmon code depuis la fenêtre de code du message de proto. C’était sans grande conviction mais, surprise, ça marche. Il se trouve que ces caractères n’en sont pas vraiment, ils prennent 3 char dans une chaine.

Edit :
:spades: : 0xE2 0x99 0xA0
:heart: : 0xE2 0x99 0xA5
:diamonds: : 0xE2 0x99 0xA6
:clubs: : 0xE2 0x99 0xA3

Le projet étant à rendre mercredi et comme il reste plein de trucs à faire je ne pense pas que je pousserais pour les ncurses, mais merci qd même.

Ils prennent 3 chars mais c’est bien 1 seul caractère à chaque fois encodé en UTF-8, Pour de plus ample information voici la le jeux de caractère contenant les 4 symboles en unicode : Miscellaneous symbols et comment passer de la représentation unicode brut en UTF-8 sur la wikipedia

Pour aider à comprendre comment nous obtenons ces caractères, prenons l’exemple du pique noir qui a pour code : U+2660 (en unicode). Ce code se trouve dans l’interval 000900-00FFFF et donc selon l’article de la wikipedia cet interval de caractère utilise le découpage suivant :

En associant chaque bit du code unicode de base avec le pseudo masque suivant xxxxyyyyyyzzzzzz,
nous le recombinons de cette manière : 1110xxxx 10yyyyyy 10zzzzzz (en binaire toujours) afin d’obtenir le code UTF-8 correspondant

Donc en découpant U+2660 en binaire nous obtenons :
0010 0110 0110 0000
xxxx yyyy yyzz zzzz (masque UTF).

d’où le caractère UTF-8 final (en binaire)
1110 0010 1001 1001 1010 0000
ce qui nous donne en hexa 0xE299A0, et qui correspond bien au code que tu as trouvé de manière empirique B)

Voilà donc ce code ne tombe pas du ciel, ce que tu utilises c’est de l’UTF 8 que tu peux retrouver ‘facilement’ via le premier site que j’ai linké qui donne tous les codes dans les différentes méthodes d’enregistrement de l’unicode (UTF-8 & UTF-16)