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

Не пишет по-русски - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Жорик
1 / 1 / 0
Регистрация: 28.08.2010
Сообщений: 63
31.08.2010, 14:00     Не пишет по-русски #1
Ввожу значения переменных на русском языке, а вместо слов непонятные буквы.
Что нужно дописать чтобы понимались русские слова?
(Редактор MSVS 2010)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3782 / 1766 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
31.08.2010, 14:02     Не пишет по-русски #2
Жорик, тема уже обсуждалась не один раз: Русские шрифты в консоли
Жорик
1 / 1 / 0
Регистрация: 28.08.2010
Сообщений: 63
31.08.2010, 14:42  [ТС]     Не пишет по-русски #3
Я пробовал вводить setlocale( LC_ALL,"" ); и setlocale( LC_ALL,"Russian" ); ), но по-русски так и не печатает.
А куда их нужно ставить?
Вот код:

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 <iostream>
 
 int main()
 {
     int number1;
     int number2;
     int number3;
     int product;
 
 
     std::cout << "Enter the first multiplier: ";
     std::cin >> number1;
 
     std::cout << "Enter the second multiplier: "; 
     std::cin >> number2;
 
     std::cout << "Enter the third multiplier: ";
     std::cin >> number3; 
 
     product = number1 * number2 * number3;
 
     std::cout << "Product is " << product << std::endl;
 
     system("pause");
     
     setlocale( LC_ALL,"" );
    
     return 0;
 }
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 14:45     Не пишет по-русски #4
Жорик, В начало. Но ввод производится русскими буквами не будет. Если вывод на экран то:

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 <iostream>
 
 int main()
 {
         setlocale( LC_ALL,"" );
         int number1;
         int number2;
         int number3;
         int product;
 
 
         std::cout << "Enter the first multiplier: ";
         std::cin >> number1;
 
         std::cout << "Enter the second multiplier: "; 
         std::cin >> number2;
 
         std::cout << "Enter the third multiplier: ";
         std::cin >> number3; 
 
         product = number1 * number2 * number3;
 
         std::cout << "Product is " << product << std::endl;
 
         system("pause");
        
         return 0;
 }
Vladimir616
110 / 110 / 3
Регистрация: 05.07.2009
Сообщений: 224
31.08.2010, 17:58     Не пишет по-русски #5
Вот такая конструкция позволяет работать с введённым русским символом (ch). Осталось только загнать её в цикл и прогнать этим циклом все русские переменные.
C++
1
2
3
4
5
6
7
8
    if(ch > 127)
    {
        if(ch < 224)
            ch += 64;
        else
            if(ch != 240)
                ch += 16;
    }
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
31.08.2010, 19:50     Не пишет по-русски #6
Цитата Сообщение от Vladimir616 Посмотреть сообщение
Вот такая конструкция позволяет работать с введённым русским символом (ch). Осталось только загнать её в цикл и прогнать этим циклом все русские переменные.
Я это пробывал работает, но через некоторое время опять бубет абракатабра.

Добавлено через 2 минуты
Вот сдесь эта тема тоже обсуждалась.

Добавлено через 9 минут
Вобще эта тема обсуждается примерно раза три в неделю.

Добавлено через 1 минуту
А этот код в VC действительно работает!

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <locale.h>
 
 
int main()
{
  setlocale(LC_ALL,"Russian"); 
  std::cout << "Русский текст" << endl;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.08.2010, 20:05     Не пишет по-русски #7
Mencey, locale.h подключать совершенно необязательно в VS 2005 и старше.
А вообще. Пишите в тестовике, компильте в консоли, запускайте там же, и никаких проблем)

Крайне удивило, что вот это:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef _LCONV_DEFINED
struct lconv {
        char *decimal_point;
        char *thousands_sep;
        char *grouping;
        char *int_curr_symbol;
        char *currency_symbol;
        char *mon_decimal_point;
        char *mon_thousands_sep;
        char *mon_grouping;
        char *positive_sign;
        char *negative_sign;
        char int_frac_digits;
        char frac_digits;
        char p_cs_precedes;
        char p_sep_by_space;
        char n_cs_precedes;
        char n_sep_by_space;
        char p_sign_posn;
        char n_sign_posn;
        };
#define _LCONV_DEFINED
#endif
Можно использовать:

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include  <locale.h>
 
int main()
{
   lconv Ob;
   Ob.thousands_sep="fdf";
   std::cout<<Ob.thousands_sep;
}
Разве не должно быть защищено от записи в поля структуры заголовочного файла IDE?
Собственно нашел инфу. Удивление уходит

Добавлено через 14 минут
Хотя нет. Не уходит. Не должна она иметь права изменяться. Она дает инфу о текущей локали.

Таки полезная штука:

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include  <locale.h>
 
int main()
{
   setlocale(LC_MONETARY, "");
   lconv*Ob;
   Ob=localeconv();
   std::cout<<Ob->currency_symbol<<' '<<Ob->int_curr_symbol<<'\n';
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.09.2010, 11:39     Не пишет по-русски #8
Цитата Сообщение от Lavroff Посмотреть сообщение
Хотя нет. Не уходит. Не должна она иметь права изменяться. Она дает инфу о текущей локали
А зачем тогда нужна информация о текущей локали, если ее нельзя изменить?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2010, 17:43     Не пишет по-русски #9
Nameless One, Локаль можно. Но зачем менять информацию о ней?) Ладно. Возможно мой вопрос некорректен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2010, 18:57     Не пишет по-русски
Еще ссылки по теме:

C++ Как это читается по-русски
C++ не работает setlocale(LC_ALL,"Russian") или Говорим по русски
Почему не пишет файл? C++

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

Или воспользуйтесь поиском по форуму:
Fantasy
0 / 0 / 0
Регистрация: 01.09.2010
Сообщений: 7
01.09.2010, 18:57     Не пишет по-русски #10
в главную функцию написать
C++
1
2
::SetConsoleOutputCP(1251);
::SetConsoleCP(1251);
Yandex
Объявления
01.09.2010, 18:57     Не пишет по-русски
Ответ Создать тему
Опции темы

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