J'essaie juste d'imprimer une forme remplie de boîtes ASCII remplies dans la console, mais la sortie est juste du texte de poubelle. Voici mon code:
#include <stdio.h>
const char shade_block[] = {
"▒▒██████▒▒\n\
▒████████▒\n\
██████████\n\
▒████████▒\n\
▒▒██████▒▒\n\
"};
int main()
{
printf(shade_block);
return 0;
}
Et voici la sortie:
ΓûÆΓûÆΓûêΓûêΓûêΓûêΓûêΓûêΓûÆΓûÆ
ΓûÆΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûÆ
ΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûê
ΓûÆΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûêΓûÆ
ΓûÆΓûÆΓûêΓûêΓûêΓûêΓûêΓûêΓûÆΓûÆ
Image du code, s'il ne s'affiche pas correctement.
Je travaille en C, CodeLite IDE, WIndows 10 avec MinGW-32. Merci d'avance.
2 réponses
Bien que les réponses de RbMm et PeterJ aient fonctionné, j'ai utilisé des conseils de cette question StackOVerflow et finalement compris comment imprimer le bloc tel quel sans échappement de caractère ni WriteConsoleW:
#include <stdio.h>
#include <wchar.h> //For wprintf and wide chars
#include <io.h> //For _setmode
#define U_16 0x20000 //U-16 text mode, for the text blocks
const wchar_t shade_block[] = {
L"▒▒██████▒▒\n"
"▒████████▒\n"
"██████████\n"
"▒████████▒\n"
"▒▒██████▒▒\n"
};
int main()
{
_setmode(_fileno(stdout), U_16); //set the output mode to U_16
wprintf(L"%s\n", shade_block);
return 0;
}
La console Windows n'utilisait que Unicode (encodage UTF-16) pour afficher le texte dans la console. si vous passez du texte à la console en Unicode, dites via WriteConsoleW
- il sera affiché tel quel. si vous utilisez la version ansi WriteConsoleA
- votre texte sera initialement converti en Unicode par appel MultiByteToWideChar
et comme premier paramètre CodePage
sera la valeur utilisée renvoyée par GetConsoleOutputCP
. par défaut, la console a utilisé la page de codes OEM GetOEMCP
. cependant vous utilisez l'encodage ansi ({ {X6}}). vous pouvez appeler SetConsoleOutputCP
avant d'imprimer dans ansi. et vous aurez besoin d'utiliser une valeur de page de code spécifique, codée en dur - exactement la même que celle utilisée par votre compilateur lors de la compilation de votre chaîne source "▒▒██████▒▒"
. lorsque vous exécutez sur les mêmes fenêtres, où vous compilez du code ( et si le compilateur ne vous donne pas d'avertissement C4566: le caractère représenté par le nom-caractère-universel '\ uxxxx' ne peut pas être représenté dans la page de codes actuelle (N) ) - le SetConsoleOutputCP(GetACP())
- fonctionnera, mais les pages de codes ANSI peuvent être différentes sur différents ordinateurs - donc ne pas fonctionner sur un autre.
Si bonne solution ici - utilisez des chaînes Unicode L"▒▒██████▒▒"
avec WriteConsoleW
ou une autre fonction W
. si vous avez une chaîne à l'exécution sous forme de chaînes multi-octets - vous en avez besoin avant de l'imprimer ou appelez SetConsoleOutputCP(cp)
où cp - est la page de code utilisée dans votre chaîne, puis utilisez la fonction A
pour la sortie. ou (mieux) convertissez d'abord vous-même la chaîne en Unicode via MultiByteToWideChar(cp, *)
, puis utilisez les fonctions W
pour la sortie
Questions connexes
De nouvelles questions
c
C est un langage de programmation à usage général utilisé pour la programmation système (OS et embarqué), les bibliothèques, les jeux et les plateformes multiples. Cette balise doit être utilisée avec des questions générales concernant le langage C, tel que défini dans la norme ISO 9899 (la dernière version, 9899: 2018, sauf indication contraire - également balise les demandes spécifiques à la version avec c89, c99, c11, etc.). C est distinct de C ++ et il ne doit pas être combiné avec la balise C ++ en l'absence d'une raison rationnelle.