Все примеры я запускаю в такой main ф-ии:
// работа с локалью взята отсюда
// https://ru.cppreference.com/w/cpp/locale/locale
int main() {
locale::global(std::locale("") );
wcout.imbue(std::locale());
cout.imbue(std::locale());
return 0;
}
Для начала вопрос про работу с объектами std::wcout и std::cout.
добавим только такую строку в мейн
wcout << L"добро1" << endl; // именно это и выведется в консоль
а теперь только такую
cout << "добро2" << endl; // именно это и выведется в консоль
а теперь обе:
wcout << L"добро1" << endl; // выведется только это, но правилньо
cout << "добро2" << endl; // ни как не вывелось! даже перевода строки нет.
а теперь поменяем местами:
cout << "добро2" << endl; //добро2
wcout << L"добро1" << endl; //4>1@>1
<<endl
на сколько я помню/знаю должен полностью очищать объект c++ потока, заставляя этот объект полностью отдавать всё своё содержимое устройству стандартного вывода.
Это так и есть (если в ф-ях делать отладку и делать '\n' вместо endl то однажды будет случай неправильной последовательности вывода) только если работаешь с одним из объектов cout или wcout.
вопрос. Есть ли способ одновременной работы и с тем и с другим объектом чтобы ничего не терялось и все выводилось на стандартный вывод. При этом обращение к cout и wcout могут быть вообще из разных мест проекта. Возможно ли такое?
Когда wcout/cout
вызывается впервые, устанавливается определенная ориентация stdout
(стандартный поток вывода). В случае cout
поток становится однобайтно-ориентированным, а в случае wcout
поток становится ориентированным на широкоформатные символы. Согласно стандарту C++ [27.4.1] и стандарту С [7.19.2] (C11 [7.21.2]), однажды установив ориентацию stdout
нельзя вызывать функции несовместимые с установленной ориентацией.
источник
Как и было сказано одновременно печатать с разными форматами нельзя. Но. Можно закрыть поток и открыть. Этим редко кто занимается.
# include <cstdio>
# include <iostream>
int main(){
int mode = fwide(stdout,0);
std::cout<<"0.mode="<<mode<<std::endl;
std::cout<<"ABC"<<std::endl;
mode = fwide(stdout,0);
std::cout<<"1.mode="<<mode<<std::endl;
freopen(NULL,"w",stdout);
setlocale(LC_ALL, "en_US.UTF-8");
mode = fwide(stdout,0);
std::wcout<<L"2.mode="<<mode<<std::endl;
std::wcout<<L"Ура"<<std::endl;
mode = fwide(stdout,0);
std::wcout<<L"3.mode="<<mode<<std::endl;
freopen(NULL,"w",stdout);
mode = fwide(stdout,0);
std::cout<<"4.mode="<<mode<<std::endl;
std::cout<<"Again"<<std::endl;
mode = fwide(stdout,0);
std::cout<<"5.mode="<<mode<<std::endl;}
Результат:
0.mode=0
ABC
1.mode=-1
2.mode=0
Ура
3.mode=1
4.mode=0
Again
5.mode=-1
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытаюсь десериализовать JSON ответ с помощью GSON через response ResponseFio = gsonfromJson(json, response
Добрый день решил изучить алгоритмы и делаю задачи из книги , но вот с этой задачей сломал голову Условия
Хочу сделать игру "города" на java (человек вводит название города, а программа выдает другой, название которого начинается на последнюю букву...
Поскольку только учусь, то не совсем понимаю как работаетВообщем есть сцена которая заливается текстурой: