Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098

Вывод символов из таблицы символов

26.12.2015, 19:35. Показов 3195. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
хочу распечатать символы из кодовой страницы и...
Подскажите, пожалуйста, почему не печатаются символы и как их вообще распечатать?
код из VS2012

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdafx.h"
#include <iostream>
#include <locale>
 
int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
    
system("chcp"); // для Windows
 
    locale loc = locale("");
    locale::global(loc);
  // используем новую глобальную локаль для последующего вывода широких символов
    wcout.imbue(loc);
 
    wcout << "Установлена локаль: "<< loc.name().c_str() << endl;
    wcout << "Манимальный номер символа потока wchar  " << WCHAR_MIN << endl;
    wcout << "Максимальный номер символа потока wchar  " << WCHAR_MAX << endl;
    
// Собственно здесь, по-моему, должно печаться
for (wchar_t i=WCHAR_MIN+1000; i>WCHAR_MAX-1000; i++)
    {
        wcout << "char["<< i << "]="<< putwchar (i) << '\t';
    }
cout << "\a";
system("pause"); 
    
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2015, 19:35
Ответы с готовыми решениями:

Вывод таблицы из символов
Необходимо вывести таюблицу из n-строк, имеющую такой вид: Есть код, но он содержит ошибки: #include &lt;iostream&gt; using...

Как настроить ввод русских символов и в дальнейшем вывод этих символов
Подскажите как в этом коде настроить ввод русских символов и в дальнейшем вывод этих символов. Данный код выводит лишь всякую ерунду место...

Вывод знака в консоль из таблицы символов Windows (charmap)
Подскажите пожалуйста как вывести математический знак умножения (точка) из таблицы символов? У нее код U+2219.

16
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.12.2015, 20:16
putwchar() - функция. Зачем ты её в wcout ставишь? И почему диапазон у цикла именно такой?
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
26.12.2015, 20:32  [ТС]
да, с putwchar(i) я уж и сам догнал - она ведь int возвращает
и переделал так (работает):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdafx.h"
#include <iostream>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    system("chcp");
 
    std::locale loc = std::locale("");
    std::locale::global(loc);
    std::cout.imbue(loc);
 
    std::cout << "Установлена локаль: "<< loc.name().c_str() << std::endl;
    std::cout << "Манимальный номер символа потока char  " << CHAR_MIN << std::endl;
    std::cout << "Максимальный номер символа потока char  " << CHAR_MAX << std::endl;
 
 
    std::cout << "Выводим таблицу символов: \n \n";
    for(char i=CHAR_MIN; i<CHAR_MAX;i++)
    {
    std::cout << "char["<< (int)i << "]=";
    std::putchar (i); 
    std::cout << '\t';
    if (i%3 == 0)   {std::cout <<  '\n';}
    else    {std::cout << '\t';}
    }
    std::cout << '\n';
    system("pause");
    return 0;
}
хотел посмотреть wchar_t что за зверь, ведь расширенный тип... ))
диапазон пляшет от констант WCHAR_MIN и WCHAR_MAX, по 1000 с каждого конца так просто обрезал
а как UTF какой-нибудь распечатать? долго правда, но хоть диапазон?
я так, упражняюсь - решил работу со строками и символами освоить, вот и "кручу" так, да этак
че-т с локалями не въезжаю, с фасетами тоже...
wchar_t - какой-то дефектный тип получается? ))
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
26.12.2015, 21:25
https://ru.wikipedia.org/wiki/UTF-8
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.12.2015, 22:57
Что значит распечатать utf? wchar_t и есть utf. Чем он дефектный?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
26.12.2015, 23:00
Цитата Сообщение от nmcf Посмотреть сообщение
wchar_t и есть utf
это с каких таких пор? unicode != utf
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.12.2015, 23:03
KOPOJI, в данном случае равен. wchar_t - utf16.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
27.12.2015, 00:00  [ТС]
короче, все смешалось в доме Облоских - люди, кони ))

nmcf,
Что значит распечатать utf? wchar_t и есть utf. Чем он дефектный?
Имелось в виду, что подобный код ничего не выводил
C++
1
2
3
4
5
6
7
8
9
std::cout << "Выводим таблицу символов: \n \n";
    for(char i=WCHAR_MIN; i<WCHAR_MAX;i++)
    {
    std::wcout << "wchar["<< (int)i << "]=";
    std::putwchar (i); 
    std::wcout << '\t';
    if (i%3 == 0)   {std::wcout <<  '\n';}
    else    {std::wcout << '\t';}
    }
надо локаль с расширенным набором символов установить типа "ru_RU.utf8"?

еще вопрос: почему
C++
1
2
3
setlocal (LC_ALL, "Rus");
time_t result = time(NULL);
    cout << asctime(localtime(&result))<< '\n';
выводит:
Sun Dec 27 и тд
почему по-русски не пишет? вроде же LC_ALL должно все переводить на русские рельсы?

и так пробую
C++
1
2
std::setlocale(LC_ALL, "ru_RU.UTF-8");
std::setlocale(LC_TIME, "ru_RU");
тоже самое...
C++
1
2
3
std::locale loc = std::locale("");
std::cout << "Установлена локаль: "<< loc.name().c_str() << std::endl;//пишет Russian_Russia.1251
std::setlocale(LC_ALL, loc.name().c_str());
тоже самое...
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.12.2015, 02:16
SergioO, Подскажите, как вывести знак фунта в консоли - перепробовал кучу способов, ничего не получается

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "stdafx.h"
#include <iostream>
#include <wchar.h>
#include <io.h>
#include <fcntl.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    _setmode(_fileno(stdout), _O_U16TEXT);
 
    using namespace std;
 
    wcout << L"Манимальный номер символа потока wchar  " << WCHAR_MIN << endl;
    wcout << L"Максимальный номер символа потока wchar  " << WCHAR_MAX << endl;
 
    wchar_t c = WCHAR_MIN + 1050;
    for (wchar_t i = c; i < c + 100; i++)
    {
        wcout << L"char[" << i << L"]=" << i << L'\t';
    }
    wcout << L"\a";
    system("pause");
 
    return 0;
}
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
27.12.2015, 10:52  [ТС]
Можно тогда сразу несколько вопросов:
#include "stdafx.h"
#include <iostream>
#include <wchar.h>
#include <io.h>
#include <fcntl.h>
это что?
C++
1
_setmode(_fileno(stdout), _O_U16TEXT);
и это что?
смотрим в стандарт С++ 14
C++ headers for C library facilities
<cassert> <cinttypes> <csignal> <cstdio> <cwchar>
<ccomplex> <ciso646> <cstdalign> <cstdlib> <cwctype>
<cctype> <climits> <cstdarg> <cstring>
<cerrno> <clocale> <cstdbool> <ctgmath>
<cfenv> <cmath> <cstddef> <ctime>
<cfloat> <csetjmp> <cstdint> <cuchar>
что используя ниже перечисленное, а лучше чисто плюсовое
C++ library headers
<algorithm> <fstream> <list> <regex> <tuple>
<array> <functional> <locale> <scoped_allocator> <type_traits>
<atomic> <future> <map> <set> <typeindex>
<bitset> <initializer_list> <memory> <sstream> <typeinfo>
<chrono> <iomanip> <mutex> <stack> <unordered_map>
<codecvt> <ios> <new> <stdexcept> <unordered_set>
<complex> <iosfwd> <numeric> <streambuf> <utility>
<condition_variable> <iostream> <ostream> <string> <valarray>
<deque> <istream> <queue> <strstream> <vector>
<exception> <iterator> <random> <system_error>
<forward_list> <limits> <ratio> <thread>
есть же <locale> или, на край, <clocale>

Демонстрирует типичный (кросс-платформенный) пролог локале-зависимой программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <locale>
 
int main()
{
    std::wcout << "Предпочитаемые пользователем настройки локали: " << std::locale("").name().c_str() << '\n';
    // при старте программы глобальная локаль установлена в локаль "C"
    std::wcout << 1000.01 << '\n';
    // заменяем глобальную локаль C++ (вместе с локалью C) на предпочитаемую пользователем локаль
    std::locale::global(std::locale("") );
    // используем новую глобальную локаль для последующего вывода широких символов
    std::wcout.imbue(std::locale());
    // снова выводим некоторое число
    std::wcout << 1000.01 << '\n';
}
и
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <clocale>
#include <ctime>
#include <cwchar>
 
int main()
{
    // the C locale will be UTF-8 enabled English;
    // decimal dot will be German
    // date and time formatting will be Japanese
    std::setlocale(LC_ALL, "en_US.UTF-8");
    std::setlocale(LC_NUMERIC, "de_DE");
    std::setlocale(LC_TIME, "ja_JP");
 
    wchar_t str[100];
    std::time_t t = std::time(NULL);
    std::wcsftime(str, 100, L"%A %c", std::localtime(&t));
    std::wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, str);
}
нельзя ли как-то "по-человечески" UTF какой мне надо только русский поставить?
просто используя вышеприведенные примеры дата выводится в английском формате...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.12.2015, 11:04
Лучший ответ Сообщение было отмечено SergioO как решение

Решение

Это нестандартная функция Visual C++, которая переключает windows-консоль в режим utf16.
C++
1
_setmode(_fileno(stdout), _O_U16TEXT);
По умолчанию она в древних кодировках работает.

Добавлено через 6 минут
Вот так выводит по-русски:
C++
1
2
3
4
5
    locale::global(locale(""));
    wchar_t str[100];
    std::time_t t = std::time(NULL);
    std::wcsftime(str, 100, L"%A %c", std::localtime(&t));
    std::wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, str);
1
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
27.12.2015, 11:51  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
C++Выделить код
* * locale::global(locale(""));
* * wchar_t str[100];
* * std::time_t t = std::time(NULL);
* * std::wcsftime(str, 100, L"%A %c", std::localtime(&t));
* * std::wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, str);
а можно эти несклько строк подробно прокомментировать, те указать заголовочные файлы необходимые и что выполняет? особо интересует вот это
C++
1
locale::global(locale(""));
и почему у меня не получалось?
вроде ж wcout использовал... надо еще было L указывать?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.12.2015, 13:04
Это же твой пример. И эта строчка у тебя выше была:
C++
1
locale::global(locale(""));
Устанавливает текущую системную локаль вместо "C".
<locale>, <cwchar>, <ctime>.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
27.12.2015, 14:43  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Это же твой пример. И эта строчка у тебя выше была:
C++Выделить код
1
locale::global(locale(""));
Устанавливает текущую системную локаль вместо "C".
<locale>, <cwchar>, <ctime>.
ну уж таки и мой пример ) копирую из руководства и разбираюсь. просто символы и строки разбираю и чего-то с локалями "засел"
устанавливает куда? и что такое "С"?

что нужно подставить в строку чтобы работал код?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <codecvt>
#include <exception>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    
    try 
    {
    std::locale l1;  // l1 - копия классической локали "C"
    std::locale l2("ru_RU.UTF8"); // l2 - юникодная локаль -чего сюда подставить, чтобы работало? какие локали доступны?
    std::locale l3(l1, l2, std::locale::ctype); // l3 - локаль "C" для всего, за исключением фасетов ctype, которые юникодные
    std::locale l4(l1, new std::codecvt_utf8<wchar_t>); // l4 - локаль "C" для всего, за исключением фасета codecvt
    std::cout << "Имена локалей:\nl1: " << l1.name()
    << "\nl2: " << l2.name()
               << "\nl3: " << l3.name() << "\nl4: " << l4.name() << '\n';
    }
    catch (std::runtime_error err)
    {
    std::cerr << err.what() << std::endl;
    }
    
    system("pause");
        return 0;
}
я пытаюсь подставлять
"ru_RU.UTF8", "ru_RU.CP1251", но получаю ошибку...
как вывести в консоль список доступных локалей?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.12.2015, 15:00
Проблема в том, что написанное в книжке не совпадает с реальностью. Когда читаешь про локали, кажется, что всё просто - установил нужную и готово. На самом деле, по крайней мере в Windows, эти функции почему-то не увязаны с работой консоли и не меняется шрифт. Например, когда ты выбираешь utf8, не происходит автоматического переключения консоли в этот режим. Нужно либо ту самую нестандартную функцию использовать, либо WinAPI.
Возможно, в Linux это работает лучше, я не проверял.

Добавлено через 48 секунд
Цитата Сообщение от SergioO Посмотреть сообщение
что такое "С"
Это локаль по умолчанию. Только английский алфавит и американские настройки.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
27.12.2015, 15:48  [ТС]
nmcf, задал вопрос на форуме MS. Интересно чего ответят.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.12.2015, 17:23
По-английски? Ответят, что не поддерживается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2015, 17:23
Помогаю со студенческими работами здесь

Цикл While, вывод таблицы символов и соответствующих им целых чисел
Всем доброго времени суток!!! Ситуация следующая... Задача: Символ 'b' равен char('a' + 1), 'c' - char('a' + 2) и т.д. Используя цикл...

Введите массив символов из 12 элементов. Удвоить все коды символов массива
Условие :Введите массив символов из 12 элементов. Удвоить все коды символов массива. Заранее спасибо )

Дана строка символов. Подсчитать общее число вхождений символов .,+ в строку
Здравствуйте. Дана строка символов. Подсчитать общее число вхождений символов .,+ в строку. Как такую программу сделать? Заранее спасибо за...

Найти количество символов в самой длинной цепочке из одинаковых символов
Дана строка символов St длиной не более 72, которая может состоять из цифр, малых латинских букв и знаков '+' '-' '*' '/' '.' ')' '(' ...

В строке символов найти максимальную подпоследовательность символов, являющуюся палиндромом
Народ, помогите пожалуйста. Нужно написать программу, используя динамический массив. Вот условие задачи: В строке символов найти...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru