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

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

Войти
Регистрация
Восстановить пароль
 
Igorokmen
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 100
#1

Работа с классами. Не работает Кириллица. Истина рядом - C++

19.05.2013, 13:04. Просмотров 378. Ответов 7
Метки нет (Все метки)

Работаю в Microsoft Visual Studio 2010.

Кириллица везде работает, кроме одного момента. Подозреваю на то, что классы не умеют работать с кириллицей. как быть?
Не отображает m_data; а выводит крякозябры.
P.S. Даже не знаю.. для новичков ли вопрос..

класс main.h :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person
{
public:
    Person(int ID, char* data, bool Pol, double age);
    Person(): m_Id(0), m_Pol(false), m_Age(0.0) { m_data[0]='\0';}
    void Print();
    void input();
 
private:
    char    m_data[50];
    int     m_Id;
    bool    m_Pol;
    double  m_Age;
};
main.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
50
// LAB1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include "main.h"
#include <string.h>
#include <stdlib.h>
using namespace std;
 
Person::Person(int ID, char* data, bool Pol, double age)
       :m_Id(ID), m_Pol(Pol), m_Age(age)
 
{
    strcpy(m_data, data);
}
 
void Person::Print()
{
    cout << "Порядковый номер: " << m_Id <<" " << "ФИО: "  << m_data <<" " << "Возраст: " << m_Age  <<" " << "Пол: ";   
    if(m_Pol==0) cout << "man" <<endl;
    else cout << "woman" << endl;
}
 
 
void::Person::input()
{
    cout << "Введите порядковый номер ID ";
    cin >> m_Id;
 
    cout << "Введите ФИО ";
    cin >> m_data;                   // Вот тут проблема!!!!!
    
    cout << "Введите возраст ";
    cin >> m_Age;   
 
    cout << "Введите пол ";
    cin >> m_Pol;
}
 
int main()
{
    
    setlocale( LC_ALL,"Russian" );
    Person nt;
    nt.input();
    nt.Print();
    system("pause");
    return 0;
}
В чем может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 13:04     Работа с классами. Не работает Кириллица. Истина рядом
Посмотрите здесь:

Работает ли Кириллица с классами? - C++
Почему-то всё корректно отображается на русском, кроме параметра, который выходит из класса. main.h: class Person { public: ...

Не работает прорамма с классами - C++
Не могу понять где ошыбка и как ее исправить . Друзья, помогите пожалуйста 1&gt;------ Построение начато: проект: ConsoleApplication2,...

Работа с классами - C++
Помогите пожалуйста написать программу. Задан массив действительных чисел. Найти количество элементов, значение которых меньше...

Работа с классами - C++
Привет!!! Есть задачка: &quot;Определите класс Oper, содержащий идентификатор типа ld (string или C-строка) и операцию (указатель на...

Работа с классами - C++
Есть задание, создать 2 класса. Один с данными но без методов, а второй сметодом отображения данных первого класса. Надо в метод передавать...

Работа с классами - C++
Задача:найти сумму всех отрицательных элементов матрицы и записать в вектор. For (i=0;i&lt;=N;i++) for (j=0;j&lt;=M;j++) if (a&lt;0) ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
19.05.2013, 13:28     Работа с классами. Не работает Кириллица. Истина рядом #2
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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <clocale>
using namespace std;
 
class Person
{
public:
    Person(int ID, char* data, bool Pol, double age);
    Person(): m_Id(0), m_Pol(false), m_Age(0.0) { m_data[0]='\0';}
    void Print();
    void input();
 
private:
    char    m_data[50];
    int     m_Id;
    bool    m_Pol;
    double  m_Age;
};
 
Person::Person(int ID, char* data, bool Pol, double age)
       :m_Id(ID), m_Pol(Pol), m_Age(age)
 
{
    strcpy(m_data, data);
}
 
void Person::Print()
{
    setlocale (LC_ALL,"Russian");
    cout << "Порядковый номер: " << m_Id <<" " << "ФИО: "  << m_data <<" " << "Возраст: " << m_Age  <<" " << "Пол: ";   
    if(m_Pol==0) cout << "man" <<endl;
    else cout << "woman" << endl;
}
 
 
void::Person::input()
{
    setlocale (LC_ALL,"Russian");
 
    cout << "Введите порядковый номер ID ";
    cin >> m_Id;
 
    cout << "Введите ФИО ";
    cin >> m_data;                   // Вот тут проблема!!!!!
    
    cout << "Введите возраст ";
    cin >> m_Age;   
 
    cout << "Введите пол ";
    cin >> m_Pol;
}
 
int main()
{
    
    setlocale( LC_ALL,"Russian" );
    Person nt;
    nt.input();
    nt.Print();
    system("pause");
    return 0;
}
Igorokmen
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 100
19.05.2013, 13:30  [ТС]     Работа с классами. Не работает Кириллица. Истина рядом #3
Что вы хотели сказать этим сообщением? ничего не изменилось.
Или вы продемонстрировали как это записать одним текстом?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.05.2013, 13:33     Работа с классами. Не работает Кириллица. Истина рядом #4
Цитата Сообщение от Igorokmen Посмотреть сообщение
Подозреваю на то, что классы не умеют работать с кириллицей.
Вы правы. Классы вообще ни с чем не могут работать

Русские шрифты в консоли
Igorokmen
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 100
19.05.2013, 13:37  [ТС]     Работа с классами. Не работает Кириллица. Истина рядом #5
Спасибо, мудрец.
Знать бы есть ли приемы, обойти этот нюанс.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.05.2013, 13:38     Работа с классами. Не работает Кириллица. Истина рядом #6
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
шрифт Lucida Console
Igorokmen
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 100
19.05.2013, 13:40  [ТС]     Работа с классами. Не работает Кириллица. Истина рядом #7
Это я должен вставить в тело программы или куда?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 13:45     Работа с классами. Не работает Кириллица. Истина рядом
Еще ссылки по теме:

Работа с классами - C++
Добрый день! Я столкнулся с проблемой которую не могу решить.Суть проблемы заключается в том что в классе Interface реализуется некая...

Работа с классами - C++
Класс соревнование. В каждом соревновании по три участника и произвольное число туров. После проведения туров объявляется победитель. ...

Работа с классами - C++
Имеется заголовочный файл В нем создаю два класса Vector и MyCamera. class Vector { public: float x,y,z; }; ...

работа с классами - C++
прошу помощи с лабой, вообще вкурить немогу что и как делать:\ Комплексное число, задаваемое своей вещественной и мнимой...


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.05.2013, 13:45     Работа с классами. Не работает Кириллица. Истина рядом #8
Цитата Сообщение от Igorokmen Посмотреть сообщение
Это я должен вставить в тело программы или куда?
Это в main - в начало функции.
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Шрифт выставляется в свойствах консоли.
И вот еще:
ЛОКАЛИЗАЦИЯ КОНСОЛЬНЫХ ПРИЛОЖЕНИЙ В ЯЗЫКЕ C++
Yandex
Объявления
19.05.2013, 13:45     Работа с классами. Не работает Кириллица. Истина рядом
Ответ Создать тему
Опции темы

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