Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 09.08.2021
Сообщений: 30

Почему ломается std::wcout

15.08.2021, 16:55. Показов 5492. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, если вывести
C++
1
2
std::wcout << L"rudis﷽﷽☐☐☐☐☐뵚얹ᇝ谀낰≫ɔ";
std::wcout << L"Name = ";
То wcout перестает работать до
C++
1
system("cls");
нечего не выводя, почему ))...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.08.2021, 16:55
Ответы с готовыми решениями:

Std::wcout не выводит сообщение
Здравствуйте. Вот в таком коде : int _tmain(int argc, _TCHAR* argv) { std::vector&lt;std::string&gt; Directories; //...

Что делать если std::string ломается
Если я пытаюсь вывести что-либо на русском, то у меня ломается текст, как это можно исправить в std::string

wcout - почему то выводит не все данные
Здравствуйте, Подскажите пожалуйста, вот у меня есть вектор в нем есть гарантированно 25 заполненных элементов: ...

14
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
15.08.2021, 23:00
В какой операционной системе это происходит? Какой компилятор?
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.08.2021, 05:46
Цитата Сообщение от titus2 Посмотреть сообщение
почему
потому что в твоём случае объект wcout настроен на локаль,
которая не совместима с теми буковками,
которые ты пытаешься в него запихнуть.

в соответствии со своей локалью,
объект wcout интерпритирует "чужаков" как некорректные последовательности байт,
и впадает в состояние "я сломался".

в этом состоянии объект перестает выводить что либо в поток.
1
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
16.08.2021, 09:50
Лучший ответ Сообщение было отмечено titus2 как решение

Решение

Да вроде все работает:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cat main.cpp
#include <iostream>
#include <locale.h>
 
int main(){
  setlocale(LC_ALL, "");
  
  std::wcout << L"rudis﷽﷽☐☐☐☐☐뵚얹ᇝ谀낰≫ɔ";
 
  std::wcout << L"Name = ";
}
$ g++ main.cpp
$ ./a.out 
rudis﷽﷽☐☐☐☐☐뵚얹ᇝ谀낰≫ɔName = $
1
0 / 0 / 0
Регистрация: 09.08.2021
Сообщений: 30
17.08.2021, 21:33  [ТС]
Спасибо, но почемуто Visual studio 2019 16.3
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <locale.h>
 
int main() {
    setlocale(LC_ALL, "");
 
    std::wcout << L"rudis﷽﷽☐☐☐☐☐뵚얹ᇝ谀낰≫ɔ";
 
    std::wcout << L"Name = ";
}
выводит только
Code
1
2
3
4
rudis
C:\Users\Vektor\Desktop\123\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (process 8924) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
в найстройках региона выбран русский windows английский...
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
17.08.2021, 21:52
Лучший ответ Сообщение было отмечено titus2 как решение

Решение

Попробуйте добавить
C
1
2
3
SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8);
      _setmode(_fileno(stdout), _O_U8TEXT);
      _setmode(_fileno(stdin), _O_U8TEXT);
Авось поможет.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.08.2021, 22:04
Цитата Сообщение от titus2 Посмотреть сообщение
Почему ломается std::wcout
таки вопрос открыт ...

Не по теме:

и еще как с помощью буста и MSVC 2015 заставить выводить крилицу, опять идти в консоль и менять шрифт ? ))))
Но это уже другая история...



Добавлено через 17 секунд
COKPOWEHEU, это костыль
0
0 / 0 / 0
Регистрация: 09.08.2021
Сообщений: 30
17.08.2021, 22:06  [ТС]
Спасибо, больше не ломается и правильно копируется но можно ли улучшить вывод или добится большего не получится от консольки
Изображения
 
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
17.08.2021, 22:11
Цитата Сообщение от SmallEvil Посмотреть сообщение
COKPOWEHEU, это костыль
Ничего не поделаешь, это windows. Если точнее, я более прямого способа не нашел.
Кстати, titus2, для ввода даже этот костыль не помогает. Что-то там основательно поломано.
Цитата Сообщение от titus2 Посмотреть сообщение
Спасибо, больше не ломается и правильно копируется но можно ли улучшить вывод или добится большего не получится от консольки
Попробуйте зайти в настройки консоли и поменять шрифт.

Добавлено через 1 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
и еще как с помощью буста и MSVC 2015 заставить выводить крилицу, опять идти в консоль и менять шрифт ? ))))
В смысле? Если выводится Юникод, какие могут быть проблемы с его подмножеством?
0
0 / 0 / 0
Регистрация: 09.08.2021
Сообщений: 30
17.08.2021, 22:14  [ТС]
Спасибо)),Правда оказалось что теперь сломался cout ))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
#include <windows.h>
#include <locale.h>
#include <fcntl.h>  
#include <io.h>
 
int main() {
    setlocale(LC_ALL, "");
    setlocale(LC_ALL, "");
    SetConsoleCP(CP_UTF8);
    SetConsoleOutputCP(CP_UTF8);
    _setmode(_fileno(stdout), _O_U8TEXT);
    _setmode(_fileno(stdin), _O_U8TEXT);
 
    std::wcout << L"rudis﷽﷽☐☐☐☐☐뵚얹ᇝ谀낰≫ɔ \n";
    std::wcout << L"Hi dear friend \n";
    std::cout << "How are u? \n";
}
Миниатюры
Почему ломается std::wcout  
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.08.2021, 22:19
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В смысле? Если выводится Юникод, какие могут быть проблемы с его подмножеством?
не знаю, сегодня подключил boost r msvc 2015, просто тестовый код для определения работает ли буст,
проект консольный, все в Юникоде, через wcout вывожу русский текст, чехарду получаю, судя по коду видно что буст пытаетсяполучить кодировку системы, и это мне нравится, что именно не так буду разбираться завтра.
тестовый кодик :
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <boost/locale.hpp>
#include <iostream>
 
#include <ctime>
 
int main()
{
    using namespace boost::locale;
    using namespace std;
    generator gen;
    locale loc = gen("");
    // Create system default locale
 
    locale::global(loc);
    // Make it system global
 
    wcout.imbue(loc);
    // Set as default locale for output
    wcout << "Привет Мир !!!";
    wcin.get();
}

получаю : ├П├░├и├в├е├▓ ├М├и├░ !!!

Добавлено через 2 минуты
titus2, консоль не может работать с двумя кодировками одновременно.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
17.08.2021, 23:15
Цитата Сообщение от SmallEvil Посмотреть сообщение
wcout << "Привет Мир !!!";
C++
1
wcout << L"Привет Мир !!!";
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
17.08.2021, 23:20
Цитата Сообщение от titus2 Посмотреть сообщение
Спасибо)),Правда оказалось что теперь сломался cout ))
Ну так не надо смешивать.
Цитата Сообщение от SmallEvil Посмотреть сообщение
тестовый кодик :
попробуйте воспроизвксти сначала мой вариант со всеми исправлениями - с какого мента начинается проблема?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.08.2021, 23:28
Цитата Сообщение от DrOffset Посмотреть сообщение
wcout << L"Привет Мир !!!";
не помогло (все то же), не парьтесь, говорю же завтра разберусь, отпишусь если не банальщина какаято.

Добавлено через 1 минуту
COKPOWEHEU, у меня вопрос иной, именно установление локализации ТОЛЬКО через boost, и как писал выше, это совсем другая тема. Извините за флуд.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
18.08.2021, 10:07
Вот пример из моих "конспектов". В gcc/mingw работает. В msvs может не работать атрибут конструктора, тогда придется эту функцию вызвать руками. Сами понимаете, проверить мне это нечем.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#ifdef WIN32
#include <windows.h>
#include "fcntl.h"
__attribute__((constructor)) void coninit(){
  SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8);
  _setmode(_fileno(stdout), _O_U8TEXT);
  _setmode(_fileno(stdin), _O_U8TEXT);
}
#endif
 
int main(){
  setlocale(LC_ALL, "");
  wprintf(L"x\u00B2+7x+4\n");
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2021, 10:07
Помогаю со студенческими работами здесь

Почему std::string_view МЕДЛЕННЕЕ, чем std::string?
Всем привет! Нужно найти количество уникальных строк в больших текстовых файлах (размером до нескольких гигабайт). Почему в...

где подвох. Почему ломается код
Вроде простой код, который должен итерационно увеличивать, но почему-то не работает корректно. При вводе чисел должно выдавать следующее ...

Я не понимаю,почему однонаправленный список ломается
Вообщем,без предисловий, сразу к делу. Разбираю программу и не могу понять; Допустим ввожу сначала 1 А, а затем 2 В и мне на экран...

Error 1 error C2447: '{' : missing function header (old-style formal list?) и почему не работает ? и подскажите как пользоваться wcout
Всем привет я начинаю обучаться программированию и сегодня столкнулся с такой проблемой Error 1 error C2447: '{' : missing function header...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++ 2005 Express Edition. Образ диска...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru