2013-01-17 22 views
5

Sono abbastanza nuovo in programmazione, ma sembra che il simbolo π(pi) non sia nel set di output standard che gestisce gli handle ASCII.Simbolo unicode di output π e ≈ in applicazione console C++ win32

Mi chiedo se c'è un modo per far sì che la console emetta il simbolo π, in modo da esprimere le risposte esatte relative a determinate formule matematiche.

+1

Qual è il vostro font della console? Basta usare CMD.EXE per verificare. Differisce dalla versione di Windows alla versione e può essere personalizzato. – MSalters

risposta

0

Microsoft CRT non è molto esperto in Unicode, quindi potrebbe essere necessario ignorarlo e utilizzare direttamente WriteConsole(). Suppongo che tu stia già compilando per Unicode, altrimenti devi usare esplicitamente WriteConsoleW()

2

Non sono veramente sicuro di altri metodi (come quelli che usano STL) ma puoi farlo con Win32 usando WriteConsoleW:

HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
LPCWSTR lpPiString = L"\u03C0"; 

DWORD dwNumberOfCharsWritten; 
WriteConsoleW(hConsoleOutput, lpPiString, 1, &dwNumberOfCharsWritten, NULL); 
0

Sono in fase di apprendimento di questo, quindi correggimi se ho qualcosa di sbagliato.

Sembra che questo è un processo in tre fasi:

  1. largo uso versioni di cout, cin, archi e così via. Quindi: wcout, wcin, wstring
  2. Prima di utilizzare un flusso, impostarlo su una modalità Unicode.
  3. Configurare la console di destinazione per utilizzare un font abilitato per Unicode.

Ora dovresti riuscire a scuotere quei funky åäös.

Esempio:

#include <iostream> 
#include <string> 
#include <io.h> 

// We only need one mode definition in this example, but it and several other 
// reside in the header file fcntl.h. 

#define _O_WTEXT  0x10000 /* file mode is UTF16 (translated) */ 
// Possibly useful if we want UTF-8 
//#define _O_U8TEXT  0x40000 /* file mode is UTF8 no BOM (translated) */ 

void main(void) 
{ 
    // To be able to write UFT-16 to stdout. 
    _setmode(_fileno(stdout), _O_WTEXT); 
    // To be able to read UTF-16 from stdin. 
    _setmode(_fileno(stdin), _O_WTEXT); 

    wchar_t* hallå = L"Hallå, värld!"; 

    std::wcout << hallå << std::endl; 

     // It's all Greek to me. Go UU! 
    std::wstring etabetapi = L"η β π"; 

    std::wcout << etabetapi << std::endl; 

    std::wstring myInput; 

    std::wcin >> myInput; 

    std:: wcout << myInput << L" has " << myInput.length() << L" characters." << std::endl; 

    // This character won't show using Consolas or Lucida Console 
    std::wcout << L"♔" << std::endl; 
}