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

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

Войти
Регистрация
Восстановить пароль
 
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
#1

Классы / Структуры и русский язык - C++

19.01.2013, 18:42. Просмотров 507. Ответов 10
Метки нет (Все метки)

Вобщем у меня такой баг вылазиет незнаю как побороть...
Подскажите в чём грабли, и как решить.
Если создаю массив обьектов то начиная со второго обьекта в класс / структуру пишется ерунда.
У первого обьекта всё вроде норм, во втором в некоторых переменных нормально в некоторых смешиваются строки...
Вот например .
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
class ClassCheloveki
{
    private:
    char pamat1[64];
    char pamat2[64];
    char pamat3[64];
    char pamat4[64];
    char pamat5[64];
    public:
    void MetodZabivau(void);
    void MetodAnekdot(void);
    void MetodZapominau(char *, char *, char *, char *, char *);
    };
 
    void ClassCheloveki::MetodZabivau(void)
    {
    for (int i2=0; i2<=64;i2++)
        { pamat1[i2] =* "";
        pamat2[i2] =* "";
        pamat3[i2] =* "";
        pamat4[i2] =* "";
        pamat5[i2] =* "";
    }
    return;
    }
 
void ClassCheloveki::MetodAnekdot (void)
{
    cout << pamat1 << endl;
    cout << pamat2 << endl;
    cout << pamat3 <<endl;
    cout << pamat4 << endl;
    cout << pamat5 << endl;
    return;
    }
 
    void ClassCheloveki::MetodZapominau(char *st1, char *st2, char *st3, char *st4, char *st5)
{
    strcpy (pamat1, st1);
    strcpy (pamat2, st2);
    strcpy (pamat3, st3);
    strcpy (pamat4, st4);
    strcpy (pamat5, st5);
    }
 
        ClassCheloveki ObjectRasskazchik[2];
 
int main()
{
    ObjectRasskazchik[0].MetodZabivau();
    ObjectRasskazchik[1].MetodZabivau();
    ObjectRasskazchik[0].MetodZapominau("Саша любит Мамбу!", "Петя любит Мамбу!", "И Сережа тоже!", "Мамбу любят все!", " - А Мамбу, вас всех ненавидит...");
    ObjectRasskazchik[1].MetodZapominau("Американские программисты никак не могли понять", "Почему их русские колеги", "Когда зависает Windows", "Всё время говорят: ", " - Вашу кролик написал! ");
    ObjectRasskazchik[0].MetodAnekdot();
    ObjectRasskazchik[1].MetodAnekdot();
    return 0;
    }
Получаю.
ipavel@raspberry:~/cpp_progs$ ./anekdot2
Саша любит Мамбу!
Петя любит Мамбу!
И Сережа тоже!
Мамбу любят все!
- А Мамбу, вас всех ненавидит...
Американские программисты никак нѐࠐߑȐ֐ݑàих русские колеги
Почему их русские колеги
Когда зависает Windows
Всё время говорят:
- Вашу кролик написал!
ipavel@raspberry:~/cpp_progs$
Помогите плз!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 18:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы / Структуры и русский язык (C++):

Русский язык - C++
char szNonColorEmbeddedMsg; int iNonColorEmbeddedMsgLen = 0; for (size_t pos = 0; pos &lt; strlen(szMsg) &amp;&amp; szMsg != '\0'; pos++) ...

русский язык - C++
Использую компилятор Dev C++ , при выводе результата если написать слово про русски то оно выводиться непонятными иероглифами, на латинице...

Русский язык - C++
Нужно написать программу, которая исправляла бы ошибки после Ж,Ч,Ш,Щ(Ы,Я,Ю на И,А,У). Учитывая исключения: Жюри, Брошюра, парашют. ...

русский язык - C++
Помогите пишу задачу,как сделать чтоб всё выводило на русском языке? какая функция? или фрагмент кода? cout&lt;&lt;&quot;Dobavlenie informacii...

Русский язык в Си - C++
Здравствуйте, Столкнулся с банальной проблемой При вводе-выводе в текстовый файл и в консоль при обращении непосредственно из main()...

Русский язык - C++
В общем у меня такая проблема , имеется код , в котором нужно что бы выводились русские буквы (имеется ввиду что без setlocale русские...

10
0xv
19.01.2013, 19:12
  #2

Не по теме:

Не знаю, у меня всё нормально работает.
Но тут ты выходишь за пределы массива (не надо включать 64, просто до 64 )

Цитата Сообщение от IPavel Посмотреть сообщение
for (int i2=0; i2<=64;i2++)

0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 675
Регистрация: 29.11.2010
Сообщений: 12,328
19.01.2013, 19:22 #3
После смены количества итераций цикла до 64 выводит корректно.
Небольшой совет:
C++
1
void MetodZapominau(const char *, const char *, const char *, const char *, const char *);
И транслит не ок, а массивы можно было в двумерный собрать (хотя std::string гораздо лучше), у вас вот, например, грозиться впихуть невпихуемое в методе MetodZapominau (если аргумент будет иметь размер больше 64).
0
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 19:24  [ТС] #4
Цитата Сообщение от 0xv Посмотреть сообщение

Не по теме:

Не знаю, у меня всё нормально работает.
Но тут ты выходишь за пределы массива (не надо включать 64, просто до 64 )

Спасибо учту!
Но этот баг точно есть...
Проверял и на debian и на ubuntu 12.04...
Причём в разных программах...
Собственно когда писал программу и наталкнулся...
И начил проверять на тестовых программах.
В данном примере смешана одна строка из первой переменной...
Если бы создал третий обьект в масиве обьектов то там тоже было бы смешана строка в первой переменной...
Не пойму где грабли...
Если не массив обьектов а один обьект то как и в примере у первого обьекта всё норм...
0
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 19:32  [ТС] #5
Цитата Сообщение от MrGluck Посмотреть сообщение
После смены количества итераций цикла до 64 выводит корректно.
Небольшой совет:
C++
1
void MetodZapominau(const char *, const char *, const char *, const char *, const char *);
И транслит не ок, а массивы можно было в двумерный собрать (хотя std::string гораздо лучше), у вас вот, например, грозиться впихуть невпихуемое в методе MetodZapominau (если аргумент будет иметь размер больше 64).
Спасибо, сейчас итерацию поправлю и попробую!
про const - да надо бы себя приучить, спасибо!
Про string - согласен надо бы разобраться с ним наконец...
А вот про "транслит" не понял....
Сорри туплю чего-то...
0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 675
Регистрация: 29.11.2010
Сообщений: 12,328
19.01.2013, 19:38 #6
IPavel, MetodZapominau -> memorize (methodMemorize)
ObjectRasskazchik -> narrator (objectNarrator)
0
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 19:51  [ТС] #7
Цитата Сообщение от MrGluck Посмотреть сообщение
IPavel, MetodZapominau -> memorize (methodMemorize)
ObjectRasskazchik -> narrator (objectNarrator)
Понял... )))
Туплю чего-то...
Да это вобще я так для хохмы такие имена дал...
Ну собственно по проблеме...
Исправил итерацию так:
for (int i2=0; i2<64;i2++)
Поправил запоминалку.
void MetodZapominau(const char *, const char *, const char *, const char *, const char *);
и сам метод
void ClassCheloveki::MetodZapominau(const char *st1, const char *st2, const char *st3, const char *st4, const char *st5)
Предупреждения ушли...
А проблема осталась!!!
Причём вывод точно такой же...
Только в этой строке и только первая переменная.

Американские программисты никак нѐࠐߑȐ֐ݑàих русские колеги

Всю голову сломал.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 675
Регистрация: 29.11.2010
Сообщений: 12,328
19.01.2013, 20:00 #8
IPavel, попробуйте вообще убрать метод Zabivayu
0
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 20:26  [ТС] #9
Цитата Сообщение от MrGluck Посмотреть сообщение
IPavel, попробуйте вообще убрать метод Zabivayu
Убрал, результат тот же...
Может компилятор где глючит...
Т.к. всё время одни и те же символы и в одном и том же месте...
сейчас ещё раз на бубунте попробую...
Вобще компилю в debian в g++ версию компилятора не помню на вскидку...

Добавлено через 14 минут
p.s. Откомпилил в бубунте.
Тоже самое, как под копирку...

p.p.s notepad++ по умолчанию ставит кодировку "utf-8 без Бом"
Может просто в utf-8 кодировать???
Читал про "бом" как я понял тут нет двух байт начальных которые показывают что это документ windos - utf-8.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 675
Регистрация: 29.11.2010
Сообщений: 12,328
19.01.2013, 20:33 #10
в редакторе какая кодировка стоит?
0
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
19.01.2013, 20:44  [ТС] #11
Цитата Сообщение от MrGluck Посмотреть сообщение
в редакторе какая кодировка стоит?
Я написал же... utf-8 без бом.
А вобще разнице никакой...
Сейчас пробывал просто utf-8 тоже самое....
И в том же месте...
на машинах где компилю есесно utf-8.
Вот кто бы попробывал этот код на бубуннте у себя скомпилить и посмотреть что получилось бы...
Если норм, тогда было бы нужно винить или windows или notepad++ ...
Потому как я пишу на винде в нотпаде и по ssh компилю на серваке...
0
19.01.2013, 20:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 20:44
Привет! Вот еще темы с ответами:

Русский Язык!!! - C++
Как в переменную char A; занести Ф только чтоб после отоброжалось не каракули а Ф! и библиотеку!

Русский язык в C++ - C++
Как в C++ консоли подключить русский язык желательной setLoceta(Rus) такой функцией, у меня не получилось её использваоть

Русский язык - C++
Уже задолбался с попыткой заставить выводить считанные русские строки. Имеем. По идее там должна быть функция CharToOem но она коверкает....

Русский язык в консоли - C++
Допустим вот код cout &lt;&lt; &quot;Помогите пожалуйста!&quot;; Пробовал и setlocale и &lt;windows.h&gt;. Проблема в том что вместо русских букв он...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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