Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
1

Вывод русского текста

02.02.2016, 21:51. Показов 2677. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, я тут упражнение из книжки делаю. Там класс с переменными, содержащими имя (тип string) и ID работника (long). Я все сделал, но когда ввожу имя русскими буквами, программа выдает какой-то мусор. Почему, не скажете, друзья?
Код:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <conio.h>
#include <cstring>
#include <string>
#include <limits>
 
using namespace std;
 
class employee {
private:
    string name;
    unsigned long id;
 
public:
    employee() { name = "Не указано!"; id = 0; }
    void putData() {
        cout << "\nВведите имя служащего: ";
        getline(cin, name, '\n');
        do {
            cout << "\nВведите ID " << name << ": ";
            if (!(cin >> id) || (cin.peek() != '\n')) {
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
                continue;
            }
            else {
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
                cout << "\n";
                break;
            }
        } while (true);
    }
    void getData() { cout << "ID: " << id << ", Имя: " << name << "\n\n"; }
};
 
int main() {
 
    setlocale(LC_ALL, "RUSSIAN");
 
    const int MAX = 2;
    int i = 0;
 
    employee emp[MAX];
 
    do {
 
        system("cls");
 
        cout << "\n======================================================\n";
        cout << "Ввод информации о служащем номер " << i + 1 << "\n";
        cout << "______________________________________________________\n\n";
        emp[i++].putData();
 
    } while (i < MAX);
 
    system("cls");
    
    for (int i = 0; i < MAX; i++) {
        cout << "\n===================================================\n";
        cout << "Информация о служащем номер " << i + 1 << "\n";
        cout << "______________________________________________________\n\n";
        emp[i].getData();
    }
 
    _getch();
}
P.S. Я знаю, функции system - зло, но мне лень было что-то другое искать, так что не кричите.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2016, 21:51
Ответы с готовыми решениями:

Вывод русского текста в консоли
Доброго времени суток.Помогите пожалуйста в таком вопросе.Вот простенькая программа,которой нужно...

Вывод русского текста в консоли
Ребят для курсового проекта требуется реализовать ввод русских букв, сколько уже не мучался с этим...

Вывод русского текста на экран в консоли
Столкнулся с такой проблемой. На экран консоли выводит краказябры. Что делать??? Вот код программы:...

Ввод русского текста
при вводе русского вопроса &quot;кто ты?&quot; программа не воспринимает его. и выводит &quot;I can't answer for...

8
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
02.02.2016, 21:53  [ТС] 2
Скриншотик прилагается!
Миниатюры
Вывод русского текста  
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.02.2016, 21:56 3
Тему нужно было назвать: "Ввод русского текста". Вывод у тебя нормально работает (благодаря setlocale(LC_ALL, "RUSSIAN");).
0
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
02.02.2016, 21:57  [ТС] 4
Цитата Сообщение от nd2 Посмотреть сообщение
Вывод у тебя нормально работает.
А, да, прости.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.02.2016, 21:58 5
Тут не смотрел решения?
Русские шрифты в консоли
0
77 / 58 / 19
Регистрация: 22.11.2015
Сообщений: 193
02.02.2016, 22:01 6
ну или используя "костыль"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char rus(char& letter) {
 
    if (int(letter) < 0) {
        if (int(letter) == -16)
        {
            return char(int(letter) - 72);
        }
        else if (int(letter) == -15)
        {
            return char(int(letter) - 57);
        }
        else if (int(letter) <= -1 && int(letter) >= -32)
        {
            return char(int(letter) + 16);
        }
        else {
            return char(int(letter) + 64);
        }
    }
    return letter;
}
0
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
02.02.2016, 22:06  [ТС] 7
CharToOem / OemToChar какой-то нашел, ща загуглю. Спасибо.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.02.2016, 22:14 8
Лучший ответ Сообщение было отмечено meJevin как решение

Решение

Можно так:
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console.[/CPP]

Добавлено через 1 минуту
Можно так (без настройки шрифта):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <locale>
 
using namespace std;
 
 int main()
 {
     wcout.imbue(locale("rus_rus.866"));
     wcin.imbue(locale("rus_rus.866"));
 
     wcout << L"Русский вывод" << endl;
     
     wstring wstr;
     getline(wcin, wstr);
 
     wcout << wstr << endl;
 
     system("pause");
     return 0;
 }
Добавлено через 1 минуту
Или так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <locale>
 
using namespace std;
 
 int main()
 {
     setlocale(LC_CTYPE,".866");
     wcout << L"Русский вывод" << endl;
     
     wstring wstr;
     getline(wcin, wstr);
 
     wcout << wstr << endl;
 
     system("pause");
     return 0;
 }
Добавлено через 1 минуту
Или так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// В Code::Blocks не будет работать
 
#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;
}
1
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
02.02.2016, 22:15  [ТС] 9
Цитата Сообщение от nd2 Посмотреть сообщение
В свойствах консоли выбрать шрифт:
Спасибо, сработало!
0
02.02.2016, 22:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2016, 22:15
Помогаю со студенческими работами здесь

Фильтрация русского текста
есть задача. Создать программу, фильтрующую текст, введенный с клавиатуры. Задача программы...

Проблема с выводом русского текста
/*Помогите пожалуйста! Почему у меня эта программа после компиляции работает нормально, т.е. в ней...

Получение русского текста из файла
У меня есть файл, в котором содержится некоторая информация. Мне всё равно, что там внутри, но там...

Запись в файл русского текста
Вообщем столкнулся с такой проблемой, надо записать данные в файл в Русском формате. Проблема в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru