Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 2
Регистрация: 06.11.2011
Сообщений: 68
1

Ошибка ввода строки следующего обьекта класса (C++)

15.09.2012, 21:38. Показов 651. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер всем!
Проблема в том, что после ввода строки обьекта базового класса в следующим производном нету возможности для его введения! И следующие строки тоже не вводяться. И в последстве программа работает некорректно. Не могу понять в чем причина.
Вот скрин ошибки:
Ошибка ввода строки следующего обьекта класса (C++)

Код:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "stdafx.h"
#include <iostream>;
#include <string>;
using namespace std;
string *setlocale(int Category, const string *Locale);
//setlocale(LC_ALL, "Ukrainian");
 
class Worker
{
protected:
    string Name;
    int Age;
public:
    void setData();
    void showData() const;
};
void Worker::setData()
{ cout<<"Введ1ть 1м'я: "; getline(cin, Name);
  cout<<"Введ1ть в1к: "; cin>>Age;}
 
void Worker::showData() const
{ cout<<"1м'я: "; cout<<Name<<endl;
cout<<"В1к: "; cout<<Age<<endl;}
 
class Dekan : public Worker
{
private:
    string howFaculty;
    int howOld;
public:
    void GetData()
    {
    Worker::setData();
    cout<<"Введ1ть назву факультету: "; cin>>howFaculty;
    cout<<"Введ1ть в1к: "; cin>>howOld;
    }
    void ShowData() const
    {
    Worker::showData();
    cout<<"Назва факультету: "; cout<<howFaculty;
    cout<<"В1к: "; cout<<howOld;
    }
};
 
class Prepod : public Worker
{
private:
    string howSubject;
    bool habar;
public:
    void getData()
    {
    Worker::setData();
    cout<<"Введ1ть назву предмету: "; cin>>howSubject;
    cout<<"Бере хабар? (1-Так, 2 - Нi): "; cin>>habar;
    }
    void showData() const
    {
    Worker::showData();
    cout<<"Назва предмету: "; cout<<howSubject;
    if (habar == 1) cout << "Бере хабарi! " << endl;
    else cout << "НЕ бере хабарi! " << endl;
    }
};
 
class Student : public Worker
{
private:
    string howFaculty;
    int howOld;
public:
    void getData()
    {
    Worker::setData(); 
    cout<<"Введ1ть назву факультету: "; cin>>howFaculty;
    cout<<"Введ1ть в1к: "; cin>>howOld;
    }
    void showData() const
    {
    Worker::showData();
    cout<<"Назва факультету: "; cout<<howFaculty;
    cout<<"В1к: "; cout<<howOld;
    }
};
 
void main()
{
setlocale(LC_ALL, "Ukrainian");
Dekan d1;
Prepod p1;
Student s1;
cout<<"Декан: "<<endl;
d1.setData();
cout<<"Викладач: "<<endl;
p1.setData();
cout<<"Студент: "<<endl;
s1.setData();
cout<<"Декан: "<<endl;
d1.showData();
cout<<"Викладач: "<<endl;
p1.showData();
cout<<"Студент: "<<endl;
s1.showData();
}
Как сделать так, чтоб данные вводились корректно? Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2012, 21:38
Ответы с готовыми решениями:

Ошибка при создании обьекта класса
Объясните пожалуйста почему нельзя создать обьект другого класса в private. В чем ошибка ? Код:...

Ошибка при записи в файл данных из обьекта класса
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; using namespace std; class Vector...

Очистка поля ввода Edit для следующего ввода значения
Здравствуйте! Необходим совет. Нужно реализовать следующую возможность: в поле ввода Edit вводится...

Теряется запрос ввода строки, содержащийся в функции класса
Здраствуйте! Имею следующую проблему : завожу класс &quot;Личности&quot;, в нем описываю различные...

4
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.09.2012, 21:53 2
Смотрите повнимательней:
C++
1
2
3
4
5
6
7
8
void Worker::setData()
{ 
    cout<<"Введ1ть 1м'я: "; 
    getline(cin, Name);
    cout<<"Введ1ть в1к: "; 
    cin>>Age;
    cin.get();
}
1
1 / 1 / 2
Регистрация: 06.11.2011
Сообщений: 68
15.09.2012, 22:10  [ТС] 3
Цитата Сообщение от yuron_477 Посмотреть сообщение
Смотрите повнимательней:
C++
1
2
3
4
5
6
7
8
void Worker::setData()
{ 
    cout<<"Введ1ть 1м'я: "; 
    getline(cin, Name);
    cout<<"Введ1ть в1к: "; 
    cin>>Age;
    cin.get();
}
Спасибо большое! Заработало! Можете обьяснить почему надо вконце добавлять cin.get()?
И еще одно: все равно программа не хочет вводить следующие строки:
C++
1
2
3
4
5
6
void GetData()
    {
    Worker::setData(); //тут все нормально вводиться из базового класса;
    cout<<"Введ1ть назву факультету: "; getline(cin, howFaculty); // а тут и ниже код не работает
    cout<<"Введ1ть в1к: "; cin>>howOld; // и не отображаеться в программе, будто етих 2-х строк и нету.
    }
Можете еще из этим мне помочь?
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.09.2012, 22:58 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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <conio.h>
#include <string>
#include <Windows.h>
 
using namespace std;
 
class Worker
{
protected:
    string Name;
    int Age;
public:
    void setData();
    void showData() const;
};
void Worker::setData()
{ 
    cout<<"Введ1ть 1м'я: "; 
    getline(cin, Name);
    cout<<"Введ1ть в1к: "; 
    cin>>Age;
    cin.get();
}
 
void Worker::showData() const
{ 
    cout<<"1м'я: "; 
    cout<<Name<<endl;
    cout<<"В1к: "; 
    cout<<Age<<endl;
}
 
class Dekan : public Worker
{
private:
    string howFaculty;
    int howOld;
public:
    void setData()
    {
        Worker::setData();
        cout<<"Введ1ть назву факультету: "; 
        getline(cin, howFaculty);
        cout<<"Введ1ть в1к: "; 
        cin>>howOld;
        cin.get();
    }
    void ShowData() const
    {
        Worker::showData();
        cout<<"Назва факультету: "; 
        cout<<howFaculty<<endl;;
        cout<<"В1к: "; 
        cout<<howOld<<endl;
    }
};
 
class Prepod : public Worker
{
private:
    string howSubject;
    bool habar;
public:
    void setData()
    {
        Worker::setData();
        cout<<"Введ1ть назву предмету: "; 
        getline(cin, howSubject);
        cout<<"Бере хабар? (1-Так, 0 - Нi): "; 
        cin>>habar;
        cin.get();
    }
    void showData() const
    {
        Worker::showData();
        cout<<"Назва предмету: "; 
        cout<<howSubject<<endl;
        if (habar) 
            cout << "Бере хабарi! " << endl;
        else 
            cout << "НЕ бере хабарi! " << endl;
    }
};
 
class Student : public Worker
{
private:
    string howFaculty;
    int howOld;
public:
    void setData()
    {
        Worker::setData(); 
        cout<<"Введ1ть назву факультету: "; 
        getline(cin, howFaculty);
        cout<<"Введ1ть в1к: "; 
        cin>>howOld;
        cin.get();
    }
    void showData() const
    {
        Worker::showData();
        cout<<"Назва факультету: "; 
        cout<<howFaculty<<endl;
        cout<<"В1к: "; 
        cout<<howOld<<endl;
    }
};
 
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
 
    Dekan d1;
    Prepod p1;
    Student s1;
 
    cout<<"Декан: "<<endl;
    d1.setData();
 
    cout<<"Викладач: "<<endl;
    p1.setData();
 
    cout<<"Студент: "<<endl;
    s1.setData();
 
    cout<<"Декан: "<<endl;
    d1.showData();
 
    cout<<"Викладач: "<<endl;
    p1.showData();
 
    cout<<"Студент: "<<endl;
    s1.showData();
    
    system("pause");
    return 0;
}


Добавлено через 2 минуты
Цитата Сообщение от WriterMix Посмотреть сообщение
Можете обьяснить почему надо вконце добавлять cin.get()?
Для перехвата Enter, который остается в буфере ввода.
1
1 / 1 / 2
Регистрация: 06.11.2011
Сообщений: 68
15.09.2012, 23:11  [ТС] 5
Цитата Сообщение от yuron_477 Посмотреть сообщение
Немного с методами в главной функции напутали, вот исправлено:
код
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <conio.h>
#include <string>
#include <Windows.h>
 
using namespace std;
 
class Worker
{
protected:
    string Name;
    int Age;
public:
    void setData();
    void showData() const;
};
void Worker::setData()
{ 
    cout<<"Введ1ть 1м'я: "; 
    getline(cin, Name);
    cout<<"Введ1ть в1к: "; 
    cin>>Age;
    cin.get();
}
 
void Worker::showData() const
{ 
    cout<<"1м'я: "; 
    cout<<Name<<endl;
    cout<<"В1к: "; 
    cout<<Age<<endl;
}
 
class Dekan : public Worker
{
private:
    string howFaculty;
    int howOld;
public:
    void setData()
    {
        Worker::setData();
        cout<<"Введ1ть назву факультету: "; 
        getline(cin, howFaculty);
        cout<<"Введ1ть в1к: "; 
        cin>>howOld;
        cin.get();
    }
    void ShowData() const
    {
        Worker::showData();
        cout<<"Назва факультету: "; 
        cout<<howFaculty<<endl;;
        cout<<"В1к: "; 
        cout<<howOld<<endl;
    }
};
 
class Prepod : public Worker
{
private:
    string howSubject;
    bool habar;
public:
    void setData()
    {
        Worker::setData();
        cout<<"Введ1ть назву предмету: "; 
        getline(cin, howSubject);
        cout<<"Бере хабар? (1-Так, 0 - Нi): "; 
        cin>>habar;
        cin.get();
    }
    void showData() const
    {
        Worker::showData();
        cout<<"Назва предмету: "; 
        cout<<howSubject<<endl;
        if (habar) 
            cout << "Бере хабарi! " << endl;
        else 
            cout << "НЕ бере хабарi! " << endl;
    }
};
 
class Student : public Worker
{
private:
    string howFaculty;
    int howOld;
public:
    void setData()
    {
        Worker::setData(); 
        cout<<"Введ1ть назву факультету: "; 
        getline(cin, howFaculty);
        cout<<"Введ1ть в1к: "; 
        cin>>howOld;
        cin.get();
    }
    void showData() const
    {
        Worker::showData();
        cout<<"Назва факультету: "; 
        cout<<howFaculty<<endl;
        cout<<"В1к: "; 
        cout<<howOld<<endl;
    }
};
 
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
 
    Dekan d1;
    Prepod p1;
    Student s1;
 
    cout<<"Декан: "<<endl;
    d1.setData();
 
    cout<<"Викладач: "<<endl;
    p1.setData();
 
    cout<<"Студент: "<<endl;
    s1.setData();
 
    cout<<"Декан: "<<endl;
    d1.showData();
 
    cout<<"Викладач: "<<endl;
    p1.showData();
 
    cout<<"Студент: "<<endl;
    s1.showData();
    
    system("pause");
    return 0;
}


Добавлено через 2 минуты
Для перехвата Enter, который остается в буфере ввода.
Дуже Вам вдячний за допомогу! Буду вивчати ООП дальше! Хай щастить!
0
15.09.2012, 23:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2012, 23:11
Помогаю со студенческими работами здесь

Смысл обьекта производного класса
Здравствуйте! Подскажите пожалуйста, что есть экземпляр производного класса в Java? Это копия...

Создание обьекта класса с параметрами
Создал небольшой обьект Avto1 с параметрами внутри: type TAvtomobil = class public ...

Вернуть С-строку из обьекта класса
Есть класс, у него метод c_str. Какой лучший способ вернуть С-строку? 1)void c_str(char* str) {...

Инициализация обьекта класса списком C++
Здравствуйте, кому не сложно расскажите в кратце как мне сделать вот такую штуку: у меня есть...


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

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