LINUX.ORG.RU

std::cout вместе с std::wcout


0

0

dont@dont ~ $ cat test.cpp
#include <iostream>
int main()
{
std::cout << "Hello char" << std::endl;
std::wcout << L"Hello WCHAR" << std::endl ;
std::cout << "Hello char" << std::endl;

return 0;
}
dont@dont ~ $ g++ -o res test.cpp
dont@dont ~ $ ./res
Hello char
Hello WCHAR
Hello char
dont@dont ~ $ cat test.cpp
#include <iostream>
int main()
{
std::cout << "Hello char" << std::endl;
std::wcout << L"Hello WCHAR" << std::endl ;

return 0;
}
dont@dont ~ $ g++ -o res test.cpp
dont@dont ~ $ ./res
Hello char
Hello WCHAR
dont@dont ~ $ cat test.cpp
#include <iostream>
int main()
{
std::wcout << L"Hello WCHAR" << std::endl ;
std::cout << "Hello char" << std::endl;

return 0;
}
dont@dont ~ $ g++ -o res test.cpp
dont@dont ~ $ ./res
Hello WCHAR
dont@dont ~ $ gcc --version
gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.1)
Copyright (C) 2006 Free Software Foundation, Inc


Локаль ru_RU.utf8.
Куда в последнем примере подевался "Hello char" ?
Что это за поведение такое?



"я тут написал какую-то хню сам не понял какую, почитайте мой код и расскажите мне, что именно за хню я написал. простыми человечими словами выразить не могу."

ага..

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

После записи в поток std::wcout не работает поток std::cout.
А "хню" написал, что бы было проще воспроизвести.

dont
() автор топика

во первых - установите локали, и для C и для C++
// set up locale
std::clog << "libc locale: " << std::setlocale(LC_ALL, "") << std::endl; // setup C rtl locale
std::locale::global(std::locale("")); // setup C++ rtl global default locale
std::clog << "std C++ locale: " << std::locale().name() << std::endl;

во вторых - установите локаль для потоков ввода-вывода

std::cout.imbue(std::locale());
std::cerr.imbue(std::locale());
std::clog.imbue(std::locale());

std::wcout.imbue(std::locale());
std::wcerr.imbue(std::locale());
std::wclog.imbue(std::locale());

и в третьих - отсоедините потоки ввода-вывода C++ от потоков ввода-вывода C библиотеки

// for correct io with wcin/wcout
std::ios::sync_with_stdio(false); // not needed if used only w* streams

Eshkin_kot ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.