Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
1

Ввод кириллицы в С++

15.08.2013, 17:42. Просмотров 5290. Ответов 28
Метки нет (Все метки)

При вводе значения переменной типа string или char кириллицей всегда выдает кракозябры.
setlocale помогает только для вывода (cout,printf работают безотказно).
Ничего не нашел полезного в гугле, везде либо предлагают изменить раскладку на досовскую 866 (работает до первого сохранения .срр файла), либо какие то сложные и непонятные функции. Как лечить?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2013, 17:42
Ответы с готовыми решениями:

Ввод кириллицы в консоли
Есть задание создать некоторую базу. Базу эту можно дописывать. Но возникает проблема ввода...

Ввод/вывод кириллицы
Здравствуйте. Ситуация такая. Я ввожу/вывожу символьный массив подобным образом: char a; cin >>...

Организовать ввод кириллицы в массив
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <conio.h> #define sz2 20 ...

Ввод/вывод кириллицы через консоль
Вот простейший пример ввода и вывода слова(символа) через консоль # include <iostream> #...

Ввод в строки и вывод в консоль кириллицы
Есть программа для подсчета количества букв в введенной строке,но если вводить строку на Русском...

28
Tulosba
:)
Эксперт С++
4752 / 3246 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.08.2013, 17:44 2
в списке важных тема висит же Русские шрифты в консоли
0
ViktorKozlov
135 / 127 / 59
Регистрация: 13.12.2012
Сообщений: 293
15.08.2013, 17:45 3
А так?
C++
1
2
3
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL,"rus");
0
alsav22
5463 / 4858 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.08.2013, 17:45 4
Странное поведение смены кодировки
0
15.08.2013, 17:45
reisal78
936 / 681 / 227
Регистрация: 28.04.2013
Сообщений: 1,921
15.08.2013, 17:46 5
Для Windows:

C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Необходимо:

C++
1
#include <windows.h>
Поидее так
0
alsav22
5463 / 4858 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.08.2013, 17:46 6
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
А так?
А про Lucida Console где?
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
15.08.2013, 17:56  [ТС] 7
Цитата Сообщение от reisal78 Посмотреть сообщение
Для Windows:

C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Необходимо:

C++
1
#include <windows.h>
Поидее так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <windows.h>
 
using std::cout; using std::cin; using std::endl;
using std::string;
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
int main()
{   
    setlocale(0,"russian");
    string name, food;
    cout << "Введите ваше имя: ";
    getline(cin,name);
    cout << "Введите ваше любимое блюдо: ";
    getline(cin,food);
    cout << "Мы приготовили для вас, уважаемый " << name;
    cout << ", вкуснейшее блюдо - " << food <<". Рады стараться!";
    cin >> food;
}
Не работает
0
Tulosba
:)
Эксперт С++
4752 / 3246 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.08.2013, 18:00 8
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Не работает
Не помешало бы знать, что 8-9 строки не вызывают функции.
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
15.08.2013, 18:03  [ТС] 9
Цитата Сообщение от Tulosba Посмотреть сообщение
Не помешало бы знать, что 8-9 строки не вызывают функции.
Спасибо за информацию, но и внутри функции майн не работает
0
alsav22
5463 / 4858 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.08.2013, 18:06 10
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Не работает
Цитата Сообщение от alsav22 Посмотреть сообщение
А про Lucida Console где?
Странное поведение смены кодировки

Добавлено через 57 секунд
Установка шрифта Lucida Console
0
reisal78
936 / 681 / 227
Регистрация: 28.04.2013
Сообщений: 1,921
15.08.2013, 19:39 11
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
#include <iostream>
#include <string>
#include <windows.h>
 
using std::cout; using std::cin; using std::endl;
using std::string;
 
 
 
int main()
{setlocale(LC_ALL,"");
 
 
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    string name, food;
    cout << "Введите ваше имя: ";
    getline(cin,name);
    cout << "Введите ваше любимое блюдо: ";
    getline(cin,food);
    cout << "Мы приготовили для вас, уважаемый " << name;
    cout << ", вкуснейшее блюдо - " << food <<". Рады стараться!";
    cin >> food;
    return 0;
}
... и правой кнопкой по заголовку окна консоли Свойства -> Шрифты -> Lucida Console
0
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
15.08.2013, 21:28  [ТС] 12
reisal78, не помогает. Те же кракозябры.
0
zer0mail
2522 / 2156 / 227
Регистрация: 03.07.2012
Сообщений: 7,789
Записей в блоге: 1
15.08.2013, 22:51 13
Если интересно, можно почитать проблемы кодировок и ввод/вывод здесь: http://zelserg.livejournal.com/2117.html
0
Nuclear_Razor
49 / 2 / 0
Регистрация: 22.07.2012
Сообщений: 104
Записей в блоге: 1
Завершенные тесты: 1
15.08.2013, 23:13 14
А это не поможет, используя wcout/wcin ?

C++
1
setlocale(LC_CTYPE,".866");
0
Nuclear_Razor
49 / 2 / 0
Регистрация: 22.07.2012
Сообщений: 104
Записей в блоге: 1
Завершенные тесты: 1
15.08.2013, 23:45 15
Есть еще стандартный способ:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//ваши хэдэры
#include <iostream>
 
using namespace std:
 
int main()
{
   setlocale (LC_ALL, "rus");
 
   //вывод на экран
 
   return 0;
}
0
zer0mail
2522 / 2156 / 227
Регистрация: 03.07.2012
Сообщений: 7,789
Записей в блоге: 1
15.08.2013, 23:58 16
Есть, но по ссылке выше я показываю, что в нем "не так" и к каким проблемам это приводит. Не то, что проблемы неразрешимы, просто надо выбрать способ, а простого и универсального способа я не знаю. Если кто знает, поделитесь.
0
Nuclear_Razor
49 / 2 / 0
Регистрация: 22.07.2012
Сообщений: 104
Записей в блоге: 1
Завершенные тесты: 1
16.08.2013, 00:06 17
zer0mail,

хм, наверное тут нужно что-то с буфером обмена делать.
Я имею ввиду, создать массив типа char, в который сначала будет забиваться введенна строка, а потом будет происходить вывод на экран. Просто нужно сделать отдельные массивы на каждый пункт ввода. Я не настаиваю на своем методе, просто пока это первое, что в голову пришло.
0
Bend3r
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
16.08.2013, 00:30 18
Шрифт меняли в свойствах cmd окна? Компилятор у вас какой?
0
alsav22
5463 / 4858 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 00:35 19
CHELOVEKPAUK, среда какая, ОС какая? Как настройки шрифта в консоли делаете? Как .exe запускаете? Скрин покажите с выводом этого кода и что вводите.
0
Dragokas
Эксперт WindowsАвтор FAQ
17114 / 7169 / 863
Регистрация: 25.12.2011
Сообщений: 10,969
Записей в блоге: 16
16.08.2013, 01:42 20
CHELOVEKPAUK, а в стандартных диалогах Windows с русским текстом проблем нет?
0
16.08.2013, 01:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 01:42

Кодировки кириллицы: CP866, Windows-1251, ввод/вывод
Доброго времени суток! Помогите, пожалуйста, разобраться с кодировками. Каким образом в одном...

Считывание кириллицы
Подскажите, пожалуйста, как считывать кириллицу из массива символов, чтобы функция ниже заработала...

Обработка кириллицы
Всем доброго времени суток. Мне бы хотелось попросить помощи. Собственно, есть одна программа,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.