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

Русификация вывода - C++

Восстановить пароль Регистрация
 
engine76
2 / 2 / 0
Регистрация: 04.03.2014
Сообщений: 65
10.03.2014, 21:34     Русификация вывода #1
Доброго времени суток. Написал такую программу:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <iomanip>
#include <cmath>
using namespace std;
#include "calculateModule.h"
int main() {
    setlocale(LC_ALL, "RUS");
    int COD;
    int calcCOD;
    double integ1;
    double integ2;
    string PIN;
    CalcMod iCalcMod;
    cout << "Введите PIN: ";
    getline(cin, PIN);
        if(PIN == "1004598PIN") {
            cout << setw(40) << "Welcome!" << endl;
            cout << "Введите код операции.\n " << "Для калькулятора - 1"
            << "\nДля выхода введите -1\n" << "КОД: ";
            cin >> COD;
            while(COD != -1) {
                if(COD == 1) {
                    cout << "Вы в калькуляторе!" << "\nВведите тип операции." << "\nДля унарных операций - 1"
                    << "\nДля бинарных операций - 2" << "\nДля выхода в главное меню введите -1\n" << "КОД: ";
                    cin >> calcCOD;
                    while(calcCOD != -1) {
                    
                        if(calcCOD == 1) {
                            ;
                            }
                        if(calcCOD == 2) {
                            cout << "Введите числа: ";
                            cin >> integ1 >> integ2;
                            iCalcMod.setIntegers(integ1, integ2);
                            iCalcMod.binarOperations();
                                }
                        if(calcCOD == -1) {
                            ;
                            }
                        cout << "Вы в калькуляторе!" << "\nВведите тип операции." << "\nДля унарных операций - 1"
                        << "\nДля бинарных операций - 2" << "\nДля выхода в главное меню введите -1\n" << "КОД: ";
                        cin >> calcCOD;
                }
            }
            cout << "Введите код операции.\n " << "Для калькулятора - 1" << "\nДля рисования - 2"
            << "\nДля выхода введите -1\n" << "КОД: ";
            cin >> COD;
        }
    }
    return 0;
}
.cpp файл, и

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//Класс-калькулятор
//---------------------------------------------------------------------
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
class CalcMod {
public:
    void setIntegers(double integer1, double integer2) {
        integ1 = integer1;
        integ2 = integer2;
        }
    void binarOperations() {
        cout << "Введите код операции.\nДля умножения - 1" << "\nДля деления - 2" << "\nДля вычитания - 3" << "\nДля сложения - 4" << endl;
        cout << "КОД: ";
        cin >> operateCod;
        switch(operateCod) {
            case 1:
                result = integ1 * integ2;
                cout << "Произведение равно - " << setprecision(3) << fixed << setw(20) << result << endl;
            break;
            
            case 2:
                result = integ1 / integ2;
                cout << "Частное равно - " << setprecision(3) << fixed << setw(20) << result << endl;
            break;
            
            case 3:
                result = integ1 - integ2;
                cout << "Разность равна - " << setprecision(3) << fixed << setw(20) << result << endl;
            break;
            
            case 4:
                result = integ1 + integ2;
                cout << "Сумма равна - " << setprecision(3) << fixed << setw(20) << result << endl;
            break;
            
            case '\n':
            case '\t':
            
            default:
                cout << "Код неправильный" << endl;
            break;
        }
    }
private:
double integ1, integ2, result;
int operateCod;
};
.h файл


Решил проверить себя в плане циклов... На два пустых IF не смотрите, туда еще что-нибудь сделаю. Я знаю что вопрос уже задавался раз сто...НО, как мне русифицировать вывод текста, ибо печатает непонятно что... setlocale(LC_ALL, "RUS"); не помогает. Пожалуйста объясните именно на этом примере. Командная строка MVS 2010, шрифт Lucida Console я поставил. И еще один вопрос: как в таком случае правильно подключать заголовочные файлы С++ библиотеки...тут я их просто продублировал в обоих файла, но наврятле это правильно. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 21:34     Русификация вывода
Посмотрите здесь:

C++ Русификация Си++ с помощю препроцессора и #define
Потоки вывода C++
C++ функция вывода
Перегрузка вывода C++
C++ Русификация при помощи класса.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
proggamer12
17 / 17 / 2
Регистрация: 06.07.2012
Сообщений: 497
Завершенные тесты: 1
10.03.2014, 22:07     Русификация вывода #2
Здравствуйте.
Ваша проблема в том, что Вы неправильно указываете параметры: правильно - так:
C++
1
setlocale(LC_ALL, "Russian");
, а в вашем примере:
C++
1
setlocale(LC_ALL, "Rus");
С наилучшими пожеланиями, proggamer12.

Добавлено через 1 минуту
По второму вопросу скорее всего нужно почитать про директивы препроцессора.
engine76
2 / 2 / 0
Регистрация: 04.03.2014
Сообщений: 65
10.03.2014, 22:24  [ТС]     Русификация вывода #3
Изменил параметр, проблема осталась(
proggamer12
17 / 17 / 2
Регистрация: 06.07.2012
Сообщений: 497
Завершенные тесты: 1
11.03.2014, 00:21     Русификация вывода #4
Какую среду Вы используете - Visual studio? Если да, то какой версии?

Попробуйте написать Hello World, и проверить работу русского языка в нем. Возможно в одной из строк кода сидит ошибка, которую Вы увидите, сделав правильно что-то простое (т. е. вывод на экран надписи "Здравствуй, Мир"

Добавлено через 44 секунды
P. S. Впишите в calculateModule.h setlocale тоже (на всякий случай)
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,646
Записей в блоге: 1
11.03.2014, 00:28     Русификация вывода #5
Попробуте вставить
C++
1
setlocale(LC_ALL, "Russian");
и оставить режим консоли по-умолчанию.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.03.2014, 00:32     Русификация вывода #6
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console.

Добавлено через 3 минуты
Цитата Сообщение от engine76 Посмотреть сообщение
И еще один вопрос: как в таком случае правильно подключать заголовочные файлы С++ библиотеки...тут я их просто продублировал в обоих файла, но наврятле это правильно. Заранее спасибо.
Тут достаточно прописать их в .h файле. using namespace std пишите после всех инклудов.
engine76
2 / 2 / 0
Регистрация: 04.03.2014
Сообщений: 65
11.03.2014, 15:57  [ТС]     Русификация вывода #7
Перепробовал все варианты, не работает... Среда Visual sudio 2010.

Добавлено через 9 минут
Так не работает (шрифт Lucida)

C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Привет мир" << endl;
    return 0;
    }
И так тоже

C++
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
int main() {
    setlocale(LC_ALL, "Russian");
    cout << "Привет мир";
    return 0;
    }
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,646
Записей в блоге: 1
11.03.2014, 16:09     Русификация вывода #8
Я предлагал использовать стандартную консоль, без "люсид"
Миниатюры
Русификация вывода  
engine76
2 / 2 / 0
Регистрация: 04.03.2014
Сообщений: 65
11.03.2014, 16:15  [ТС]     Русификация вывода #9
E:\Programms\VS2010\VC>cl universalModule.cpp
Оптимизирующий компилятор Microsoft (R) C/C++ версии 16.00.30319.01 для x64
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

universalModule.cpp
E:\Programms\VS2010\VC\INCLUDE\xlocale(323) : warning C4530: Использован обработ
чик исключений C++, но семантика уничтожения объектов не включена. Задайте парам
етр /EHsc
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:universalModule.exe
universalModule.obj

E:\Programms\VS2010\VC>universalModule
Р'Р?РчР?РёС'Рч PIN: -1

E:\Programms\VS2010\VC>

В консоли все стандартно
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,646
Записей в блоге: 1
11.03.2014, 16:18     Русификация вывода #10
Похоже, что текст программы в Unicode
engine76
2 / 2 / 0
Регистрация: 04.03.2014
Сообщений: 65
11.03.2014, 16:39  [ТС]     Русификация вывода #11
Все понял в чем проблема была...в notepad++ по умолчанию UTF8 кодировка была) Всем спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2014, 22:47     Русификация вывода
Еще ссылки по теме:

C++ русификация выводимого из переменных текста
Русификация.Работает-супер! Обьяснитте, как это работает? C++
Выравнивание вывода C++

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

Или воспользуйтесь поиском по форуму:
proggamer12
17 / 17 / 2
Регистрация: 06.07.2012
Сообщений: 497
Завершенные тесты: 1
11.03.2014, 22:47     Русификация вывода #12
Удобнее было-бы использовать Visual Studio 2010 или более новую (есть Express версия) - http://www.microsoft.com/ru-ru/softm...ioExpress.aspx
Yandex
Объявления
11.03.2014, 22:47     Русификация вывода
Ответ Создать тему
Опции темы

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