std :: wcout alla finestra della console in XCode [chiuso]
Domanda
In un progetto XCode, se uso std :: cout
per scrivere sulla console, l'output va bene.
Tuttavia, se uso std :: wcout
non ottengo alcun output.
So che questo è un problema spinoso in C ++ e ho cercato su Google di cercare una soluzione specifica nel caso XCode. Un paio di cose che ho scoperto che è stato suggerito dovrebbero funzionare sono:
std::cout.imbue( std::locale("") );
e
std::setlocale(LC_ALL, "");
Nessuno di questi ha fatto alcuna differenza. Prima di rassegnarmi a trascorrere le prossime due settimane a studiare l'API delle sfaccettature solo per poter scrivere sulla console, ho pensato di controllare con la stima audace qui.
[Aggiornamento]
Penso che il motivo del problema che sto avendo sia in realtà a che fare con la codifica specifica di alcune delle stringhe che sto cercando di stampare.
Se invio solo una stringa letterale, usando L " my string " sintassi
funziona! Sembra che questo stia usando UTF32 - codifica little endian.
Tuttavia, lo sto mescolando con le stringhe che sono state passate dal codice Objective C ++ usando la codifica NSUTF32BigEndianStringEncoding. È questo mix di codifiche che sta causando i problemi.
Penso che possiamo considerare chiusa questa questione. Grazie per aver letto.
Soluzione
std :: wcout dovrebbe funzionare proprio come std :: cout.
Quanto segue funziona perfettamente sul mio MAC:
#include <iostream>
int main()
{
std::cout << "HI" << std::endl;
std::wcout << L"PLOP" << std::endl;
}
Forse (anche se un po 'di codice sarebbe stato carino) è perché non stai scaricando il buffer. Ricorda che std :: cout e std :: wcout sono bufferizzati. Ciò significa che l'output non verrà inviato alla console fino a quando il buffer non viene riempito o non si scarica esplicitamente il buffer.
Puoi svuotare il buffer con:
std::wcout << flush();
// or
std::wcout << endl; // Those also puts a '\n' on the stream.