2017-11-10 5 views
0

これらの文字の印刷方法についてはいくつかの質問がありますが、いずれの方法も機能していないようです。私が読んでいるコメントのいくつかに基づいてWin32コンソールアプリケーションを作っているからだと思う。 ここに、自分のコードで現在試したことの例を示します。それは疑問符のボックスを印刷するだけです。疑問符や無作為な記号が表示された場合は変更してください。C Win32コンソールアプリケーションでカードスーツ文字を印刷するにはどうしたらいいですか?

これを上に定義しようとしました。

#define SPADE '\x06' 
#define CLUB '\x05' 
#define HEART '\x03' 
#define DIAMOND '\x04' 

内部機能は、これらは私が試したことのいくつかです。私はそれを理解できない場合に備えて、S、D、H、Cを残しました。

printf("%lc", SPADE); 
    //printf("♠"); 
    //printf("S"); 

    printf("%lc", HEART); 
    //printf("♥"); 
    //printf("H"); 

    printf("%lc", DIAMOND); 
    //printf("♦"); 
    //printf("D"); 

    printf("%lc", CLUB); 
    //printf("♣"); 
    //printf("C"); 
+0

x06はなぜスペードキャラクターだと思いますか? – pm100

+0

疑問符ボックスが表示されるのは、シェルがその16進値に対して表示する文字を認識しないためです。これらの文字を含む文字パックがインストールされていることを確認する必要があります。 –

+0

[CとLinuxでスペード、ハート、ダイヤモンドなどを印刷するにはどうすればいいですか?](https://stackoverflow.com/questions/27133508/how-to-print-spades-hearts-diamonds-etc-in -c-and-linux) – user3629249

答えて

1

UTF-16 wchar_tおよびワイド文字機能がWindowsに必要です。

#include <windows.h> 

int main() 
{ 
    DWORD n; 
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); 
    const wchar_t *buf = L"♠♥♦♣\n"; 
    WriteConsoleW(hout, buf, wcslen(buf), &n, 0); 
    return 0; 
} 

次のコードは、Visual Studioでコンパイルします:

#include <stdio.h> 
#include <io.h> //for _setmode 
#include <fcntl.h> //for _O_U16TEXT 

int main() 
{ 
    _setmode(_fileno(stdout), _O_U16TEXT); 
    wprintf(L"♠♥♦♣\n"); 
    return 0; 
} 

UTF-16にモードを設定した後、あなたは再びprintfを使用したい場合_setmode(_fileno(stdout), _O_TEXT)を呼び出す必要があります。

+0

これらの文字をメモ帳++のテキストエディタにコピー&ペーストして保存し、ファイルダンプを見ると、使用されているグリフあたり3バイト、 'E2 99 A0'と' E2 99 A5 'と' E2 99 A6'と 'E2 99 A3'を使用しています。それは16ビットではなく24ビットです。 –

+0

@WeatherVane Windowsでは、文字をコピーするとUTF-16として保存されます。メモ帳に貼り付けると、フォーマットがUTF-8に変換されます。あなたの* .cppファイルはおそらくUTF-8で保存されていますが、コンパイラはUTF-16と見なします。なぜなら 'L 'のプレフィックス' L "♠♥♣♣\ n" 'のためです。また、WriteConsoleWを使って何かを編集してメモ帳++/MinGWから印刷することもできます。 –

+0

Hmmm、最近、コンソールからMSVCコンパイラを使用していますが、Visual Studioは使用していません。メモ帳の++ファイルは '.txt'なので、コンパイルには使われません。私は、マルチバイト文字エンコーディングでスピードアップする必要があることを認識しています。しかし、 '.c'ソースコードにコピー/ペーストしたときの両方の例は、コンソールにゴミを印刷しました。コードページはまだ使用されていますか? –

関連する問題