Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.71
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 420
#1

Не работает setlocale(LC_ALL,"Russian") или Говорим по русски - C++

18.11.2013, 00:08. Просмотров 8633. Ответов 21
Метки нет (Все метки)

оператор setlocale(LC_ALL,"Russian"); при проверке одной консольной программы сpp в 3 оболочках
C++Builder, CodeBlocks, MS VisualStudio 2008 давал русские буквы только в Visual Studio. В остальных-не работал.
Почему? Мне удобно в разных местах не завязываться только с VisualStudio а нужен надежный способ вывода русского текста вне зависимости от оболочки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 00:08     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски
Посмотрите здесь:

Кодировки - setlocale (LC_CTYPE, "rus") C++
C++ Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*".
Функция setlocale( LC_ALL,"Russian" ) и класс String C++
Почему когда в рабочую программу вставляю setlocale(LC_ALL, "Rus"); она перестает корректно работать C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" C++
C++ Не работает "setlocale( LC_ALL,"Russian" )"
Чем можно заменить функцию setlocale(LC_ALL, "RUSSIAN")? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
18.11.2013, 00:30     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #2
Попробуй подключать
Код
#include <clocale>
Ну или используй
C++
1
2
3
4
5
6
<include <Windows.h>
int main()
{
       SetConsoleCP(1251);
       SetConsoleOutputCP(1251);
}
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 420
18.11.2013, 00:55  [ТС]     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #3
Проверил- не помогло. Правда под чистым С вообще не понимает константу LC_ALL а при подключении
#include <clocale> хоть компилит, но русского нет. Так же и с SetConsoleCP(1251);
SetConsoleOutputCP(1251); в С++Builder
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 01:42     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #4
Цитата Сообщение от eugrita Посмотреть сообщение
Проверил- не помогло.
Чтобы это работало, нужно в свойствах консоли выбрать шрифт Lucida Console.
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 420
18.11.2013, 01:57  [ТС]     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #5
Это в каких свойствах? Если в свойствах редактора то проге после компиляции на это наплевать.А в свойствах проекта- свойствах компилятора, Compiler?Advanced Compiler?Linker -такого нет
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 02:24     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #6
Цитата Сообщение от eugrita Посмотреть сообщение
Это в каких свойствах?
Установка шрифта Lucida Console
ranebull
513 / 346 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
18.11.2013, 07:09     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #7
Цитата Сообщение от eugrita Посмотреть сообщение
оператор setlocale(LC_ALL,"Russian"); при проверке одной консольной программы сpp в 3 оболочках
C++Builder, CodeBlocks, MS VisualStudio 2008 давал русские буквы только в Visual Studio. В остальных-не работал.
Почему? Мне удобно в разных местах не завязываться только с VisualStudio а нужен надежный способ вывода русского текста вне зависимости от оболочки.
Borland,CodeGear,Embarcadero C++ Buider:
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma hdrstop
#pragma argsused
#include<iostream.h>
#include<windows.h>
main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Привет\n";
    system("pause");
}
Code::Blocks:
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
#include<locale>
#include<cstdlib>
int main()
{
    setlocale(LC_CTYPE,"Russian");
    std::cout<<"Привет\n";
    system("pause");
}
Visual Studio:
1 вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include<iostream>
#include<Windows.h>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    std::cout<<"Привет\n";
    system("pause");
}
2 вариант:
C++
1
2
3
4
5
6
7
8
9
10
#include "stdafx.h"
#include<iostream>
#include<locale>
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    std::cout<<"Привет\n";
    system("pause");
}
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.11.2013, 09:04     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #8
Цитата Сообщение от eugrita Посмотреть сообщение
оператор setlocale(LC_ALL,"Russian"); при проверке одной консольной программы сpp в 3
setlocale не предназначен для смены кодовых страниц, у ВС это побочный эффект. Тут только два универсальных способа либо менять кодировку самой консоли SetConsoleCP()\SetConsoleOutputCP(), либо перекодировать строки CharToOem()\OemToChar(). Второй более предпочтительный, потому что не требует пляски с бубном в виде смен шрифта в консоли.
Есть еще один способ, работать в текстовом редакторе поддерживающим кодировку ОЕМ 866 и набирать прогу в нем.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 10:05     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #9
Цитата Сообщение от ranebull Посмотреть сообщение
Code::Blocks:
#include<iostream>
#include<locale>
#include<cstdlib>
int main()
{
setlocale(LC_CTYPE,"Russian");
std::cout<<"Привет\n";
system("pause");
}
В Code::Blocks такое не работает.
В студиии, setlocale(LC_CTYPE,"Russian"), только на вывод.
zss
Модератор
Эксперт С++
6184 / 5787 / 1874
Регистрация: 18.12.2011
Сообщений: 14,782
Завершенные тесты: 1
18.11.2013, 10:33     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #10
Советую пользоваться функциями преобразования консольных кодов в Windows и наоборот
OemToAnsi(char* to,char* from);
AnsiToOem(char* to,char* from);
SatanaXIII
18.11.2013, 10:38
  #11

Не по теме:

Советую вообще не пользоваться в консоли русскими буквами.

SBT
4 / 4 / 1
Регистрация: 18.08.2012
Сообщений: 62
18.11.2013, 10:42     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #12
Я лично просто перевожу кодировку файла в OEM866(комплируемого), и русский отлично отображаеться.
ranebull
513 / 346 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
18.11.2013, 13:48     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #13
Цитата Сообщение от alsav22 Посмотреть сообщение
В Code::Blocks такое не работает.
В студиии, setlocale(LC_CTYPE,"Russian"), только на вывод.
В смысле не работает? Я сам для проверки написал код, а только потом отправил его.
Миниатюры
Не работает setlocale(LC_ALL,"Russian") или Говорим по русски  
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 13:58     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #14
Цитата Сообщение от ranebull Посмотреть сообщение
В смысле не работает?
В прямом смысле. ОС? Code::Blocks?
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 14:04     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #15
...
Миниатюры
Не работает setlocale(LC_ALL,"Russian") или Говорим по русски  
ranebull
513 / 346 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
18.11.2013, 14:13     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #16
Цитата Сообщение от alsav22 Посмотреть сообщение
В прямом смысле. ОС? Code::Blocks?
Code::Blocks 12.11, Win7x64 Ultimate, компилятор-MinGW, идущий в комплекте к IDE.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 14:41     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #17
В настройках редактора: WINDOWS - 1251 ?
ranebull
513 / 346 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
18.11.2013, 14:45     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #18
Цитата Сообщение от alsav22 Посмотреть сообщение
В настройках редактора WINDOWS - 1251 ?
Да, Win-1251.
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 15:09     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #19
Сейчас в 7 попробовал (до этого в XP пробовал). В 7, у меня, и без setlocale(LC_CTYPE,"Russian") по русски выводит (только чтобы в консоли шрифт Consolas или Lucida Console был установлен).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2013, 15:27     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски
Еще ссылки по теме:

C++ setlocale( LC_ALL,"Russian" );
C++ Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел
C++ Не правильное значение при использовании {setlocale (LC_ALL, "Russian");
Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? C++
C++ Неправильное отображение русского текста в консоли при использовании setlocale(LC_ALL, "Russian")

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

Или воспользуйтесь поиском по форуму:
ranebull
513 / 346 / 54
Регистрация: 23.06.2013
Сообщений: 1,182
Записей в блоге: 6
18.11.2013, 15:27     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски #20
Цитата Сообщение от alsav22 Посмотреть сообщение
Сейчас в 7 попробовал (до этого в XP пробовал). В 7, у меня, и без setlocale(LC_CTYPE,"Russian") по русски выводит (только чтобы в консоли шрифт Consolas или Lucida Console был установлен).
У меня без setlocale(LC_CTYPE,"Russian") не выводит (шрифт установлен). Может вы после изменения не пересобрали проект?
Yandex
Объявления
18.11.2013, 15:27     Не работает setlocale(LC_ALL,"Russian") или Говорим по русски
Ответ Создать тему
Опции темы

Текущее время: 01:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru