Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
1

Русский язык в консоли

21.08.2014, 16:18. Просмотров 2353. Ответов 14
Метки нет (Все метки)

Здравствуйте. Чего-то не разберусь с русским языком.

C++
1
setlocale(LC_ALL,"RUSSIAN");
и
C++
1
setlocale(LC_ALL,"1251");
- классно.

Мне нужно вводить выводить с клавиатуры, а так же из текстового файла. Одна из выше строк помогает при работе с файлом, вторая - для клавиатуры. Т.е. один вариант помогает ввести с клавиатуры русский текст, но в то же время при выводе из файла странный набор символов, соответственно, наоборот, второй вариант адекватно выводит из файла, но с клавы - крокозяблики. Я должен использовать переключение динамически, в зависимости с чем работаю или есть более универсальные способы?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2014, 16:18
Ответы с готовыми решениями:

Русский язык в консоли
При вводе русских букв в консоль (cin >> a), функция просто не работает,...

Русский язык в консоли
Допустим вот код cout << "Помогите пожалуйста!"; Пробовал и setlocale и...

Русский язык в консоли
Здравствуйте.У меня следующая проблема:Когда я записываю русский текст в...

Русский язык в консоли
Здравствуйте! Перепробовал все способы в соответствующей теме - ничего не...

Русский язык в консоли
для работы с русским языком использую: #include <locale>...

14
Ryuk
179 / 177 / 56
Регистрация: 10.06.2011
Сообщений: 871
21.08.2014, 16:33 2
Цитата Сообщение от Retyrn0 Посмотреть сообщение
или есть более универсальные способы?
Выучить английский язык например.
0
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 16:45 3
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
прочитай про них... правда на XP у меня они не работают...
1
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
21.08.2014, 17:32 4
Retyrn0, тут смотрели? Ещё есть поиск по форуму, там вот что дают. Ну и гугл модно тож.
0
ranebull
527 / 360 / 56
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
21.08.2014, 17:37 5
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Здравствуйте. Чего-то не разберусь с русским языком.
Напишите IDE, в которой работаете и прикрепите код программы.
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.08.2014, 20:25  [ТС] 6
Цитата Сообщение от Ryuk Посмотреть сообщение
Выучить английский язык например.
Спасибо. А если я пишу базу данных, мне всех пользователей нужно заставлять писать исключительно на английском языке всё? Обожаю такие ответы)

Добавлено через 3 минуты
Цитата Сообщение от gru74ik Посмотреть сообщение
тут смотрели?
"Извините, нет совпадений. Попробуйте указать другие ключевые слова."
Цитата Сообщение от gru74ik Посмотреть сообщение
вот что дают
Я пробовал множество способов, но во всех темах вопрос по языку ввода - с этим проблем нет, по языку файла - тоже не проблема, а работа и с тем и другим на русском не работают. Один способ помогает только с вводом-выводом, второй только с файлами, а чтобы и то и другое работало одновременно не выходит.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
21.08.2014, 20:29 7

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
там вот что дают
Что дают? Предупреждение о нарушении правил за отсыл в поиск?


Цитата Сообщение от Retyrn0 Посмотреть сообщение
setlocale(LC_ALL,"RUSSIAN");
а в консоли меняли шрифт? И вообще, хоть бы сообщили ОС, редактор
1
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.08.2014, 20:32  [ТС] 8
Цитата Сообщение от ranebull Посмотреть сообщение
Напишите IDE, в которой работаете и прикрепите код программы.
VS2008 С++.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
void main()
{
//  SetConsoleCP("1251");
//  SetConsoleOutputCP("1251");
//  setlocale(LC_ALL,"Russian");
//  setlocale(LC_ALL,"1251");
//  setlocale (LC_ALL, "RUS.UTF-8");
 
    char str[2048];
    gets(str);
    puts(str);
    FILE*file=fopen("1.txt","rt");
    fgets(str,2048,file);
    puts(str);
    fclose(file);
}
Собственно, я уже создал отдельный проект, чтобы исключить разные чудеса функций - вот этот простой пример не работает. Я раскомментирую одну из строк вверху - включается либо только русский при вооде-выводе с клавиатуры-на экран, либо только правильно отображается русский текст из файла, но одновременно и тот и другой вариант не работают.

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
а в консоли меняли шрифт?
хм..возможно это поможет...сейчас попробую. Просто setlocal помог и язык отображается правильно, но только в одном из случаев.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
21.08.2014, 20:41 9
Ну у меня и без всяких локалей отлично отображает русский текст. Правда, проверял только с консолью, файл влом создавать.. И VS2013 (Express)..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    //  SetConsoleCP("1251");
    //  SetConsoleOutputCP("1251");
    //  setlocale(LC_ALL,"Russian");
    //  setlocale(LC_ALL,"1251");
    //  setlocale (LC_ALL, "RUS.UTF-8");
 
    char str[2048];
    gets(str);
    puts(str);
    /*FILE*file = fopen("1.txt", "rt");
    fgets(str, 2048, file);
    puts(str);
    fclose(file);*/
    getchar();
    return 0;
}
Русский язык в консоли
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.08.2014, 20:43  [ТС] 10
C++
1
2
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
- Вот средство, но нужно ещё менять шрифт умолчания консоли, а
C++
1
setlocale(...);
с разнообразными аргументами не дают универсального метода.
Спасибо, тема закрыта.

Добавлено через 1 минуту
Цитата Сообщение от KOPOJI Посмотреть сообщение
файл влом создавать
В том и проблема была - отдельно или с тем или с другим - порядок, ног чтобы и то и другое отображалось адекватно не получалось.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
21.08.2014, 20:47 11
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вот средство, но нужно ещё менять шрифт умолчания консоли
http://www.cyberforum.ru/post4942353.html

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 <Windows.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hCon = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
    if (hCon != INVALID_HANDLE_VALUE) {
        CONSOLE_FONT_INFOEX cfi;
        cfi.cbSize = sizeof(CONSOLE_FONT_INFOEX);
        cfi.nFont = 0;
        cfi.dwFontSize.X = 0;
        cfi.dwFontSize.Y = 12;
        cfi.FontFamily = FF_DONTCARE;
        cfi.FontWeight = 400;
        wcscpy(cfi.FaceName, L"Lucida Console");
        SetCurrentConsoleFontEx(hCon, FALSE, &cfi);
    }
 
    char str[2048];
    gets(str);
    puts(str);
    /*FILE*file = fopen("1.txt", "rt");
    fgets(str, 2048, file);
    puts(str);
    fclose(file);*/
    getchar();
    return 0;
}
Работает..
0
zer0mail
2454 / 2090 / 217
Регистрация: 03.07.2012
Сообщений: 7,581
Записей в блоге: 1
21.08.2014, 21:23 12
Retyrn0, по поводу кодировок советую почитать: http://zelserg.livejournal.com/2117.html
1
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
22.08.2014, 00:40  [ТС] 13
Цитата Сообщение от KOPOJI Посмотреть сообщение
Работает..
Спасибо, попробую позже, пока нет возможности. Я правильно понимаю, что и текст из файла будет правильно отображаться?
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2014, 03:07 14
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Код C++1
2
* * SetConsoleCP(1251);
* * SetConsoleOutputCP(1251);- Вот средство, но нужно ещё менять шрифт умолчания консоли
Есть способ (для студии) не менять шрифт по умолчанию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Шрифт точечный. Русский ввод и вывод без  настройки шрифта (берётся по умолчанию)
// В Code::Blocks не будет работать (отсутствует кодировка 866 )
 
#include <cstdlib>
#include <string>
#include <windows.h>
using namespace std;
 
int main ()
{    
    setlocale(0, "");
    cout << "Русский ввод!" << endl;
    
    SetConsoleCP(1251);
    string str;
    cin >> str;
    SetConsoleCP(866);
    
    cout << str << endl;
    
   system("pause");
   return 0;
}
0
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
22.08.2014, 05:36 15
Цитата Сообщение от gru74ik Посмотреть сообщение
Retyrn0, тут смотрели?
Имелась ввиду тема Русские шрифты в консоли (на 6 страниц), которая находится в шапке раздела С++ для начинающих.
0
22.08.2014, 05:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 05:36

Русский язык в консоли
Скажу сразу, что закрепленную тему я прочитал, но не очень понял, как это...

Русский язык в консоли Qt 5.3
помогите пожалуйста

Русский язык в консоли
Как сделать запись в файл и чтение с него русскими буквами а не иероглифами?


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

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

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