WIE KANN ICH IN C DAS ◻️und das ◼️ auf der Console ausgeben?
Hab diesen Code geschrieben:
#include <stdio.h>
#include <stdlib.h>
#include "console.h"
#define SIZE 8 // Größe des Schachbretts
char *schachbrett[SIZE][SIZE];// 2D-Array für das Schachbrett
void initSpielfeld();
void ausgabeSpielfeld();
void spielBeenden();
int main() {
initSpielfeld();
initConsole();
ausgabeSpielfeld();
getch();
clrscr();
gotoxy(0,0);
}
void initSpielfeld(){
// Fülle das Schachbrett mit den richtigen Symbolen
for (int i = 0; i < SIZE; i++) { // Zeilen
for (int j = 0; j < SIZE; j++) { // Spalten
// Wenn die Summe der Indizes gerade ist, ist das Feld weiß
if ((i + j) % 2 == 0) {
schachbrett[i][j] = "◻"; // Weißes Quadrat
} else {
schachbrett[i][j] = "◼"; // Schwarzes Quadrat
}
}
}
}
void ausgabeSpielfeld(){
// Gebe das Schachbrett aus
for (int i = 0; i < SIZE; i++) { // Zeilen
for (int j = 0; j < SIZE; j++) { // Spalten
printf("%s ", schachbrett[i][j]); // Quadrat ausgeben
}
printf("\n"); // Neue Zeile nach jeder Zeile im Schachbrett
}
}
void spielBeenden(){
return 0;
}
Bei mir kommt da aber immer das raus:
Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝
Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗
Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝
Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗
Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝
Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗
Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝
Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗ Ôù╝ Ôù╗
Aber das ist nicht mein ziel.
Ich möchte einfach nur ein schönes Schachbrett ausgeben.
Kann mir da jemand helfen?
3 Antworten
Du verwendest ein Unicodezeichen in einer ASCII-Consolumgebung.
Allein die Compileroptionen zu ändern gewährleistet jedoch nicht die richtige Darstellung von UTF8 in einer übergeordneten/aufrufenden Console. Diese muss ggf. für die Darstellung von Unicode explizit eingerichtet werden.
Festlegen der Codepage in der Windowsconsole:
chcp 65001
...für UTF-8
- https://ss64.com/nt/chcp.html
- https://learn.microsoft.com/de-de/windows-server/administration/windows-commands/chcp
PS: Der UTF-8 Support der Standard-Windowsconsole (cmd.exe) bzw. Powershell unter Version 6 ist (teilweise) fehlerhaft!
Bei mir tut's :-)
> gcc -std=c99 -Wall chessboard.c && ./a.out
◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼
◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻
◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼
◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻
◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼
◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻
◻ ◼ ◻ ◼ ◻ ◼ ◻ ◼
◼ ◻ ◼ ◻ ◼ ◻ ◼ ◻
Aber Du verwendest vermutlich ein MS-DOS-Terminal aus der Steinzeit. Mit einem einigermaßen aktuellen Windows kannst Du diese Konsole via „chcp 65001" auf UTF-8 umschalten, und dann musst Du einen Font wählen, der diese Quadrate anzeigen kann.
Wenn Dein "console.h" auch Farbe oder die ANSI-Sequenzen "\33[7m" (invertiert) und "\33[m" (normal) unterstützt, wird es einfacher sein, normale und invertierte Leerzeichen auszugeben. Mit 2 Leerzeichen je Feld sieht das bei mir etwa so aus:

Ich kann es nicht selbst testen, bin aber neugierig: Funktioniert es bei Dir mit
printf("\33[%dm \33[m", (i+j)%2 ? 7 : 0);
statt
printf("%s ", schachbrett[i][j]);
?
Ich habe deinen rat befolgt aber in cLion fonktionirt das bei mir irgendwie nicht