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

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

Восстановить пароль Регистрация
 
WriterMix
1 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 68
15.09.2012, 21:38     Ошибка ввода строки следующего обьекта класса (C++) #1
Добрый вечер всем!
Проблема в том, что после ввода строки обьекта базового класса в следующим производном нету возможности для его введения! И следующие строки тоже не вводяться. И в последстве программа работает некорректно. Не могу понять в чем причина.
Вот скрин ошибки:
Ошибка ввода строки следующего обьекта класса (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();
}
Как сделать так, чтоб данные вводились корректно? Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2012, 21:38     Ошибка ввода строки следующего обьекта класса (C++)
Посмотрите здесь:

C++ Адрес объекта класса
возврат копии обьекта класса из метода C++
Инициализация обьекта внутри другого класса C++
C++ Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
C++ Дано описание следующего класса class TPoint ... Как описывается указатель на данный класс
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.09.2012, 21:53     Ошибка ввода строки следующего обьекта класса (C++) #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();
}
WriterMix
1 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 68
15.09.2012, 22:10  [ТС]     Ошибка ввода строки следующего обьекта класса (C++) #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-х строк и нету.
    }
Можете еще из этим мне помочь?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.09.2012, 22:58     Ошибка ввода строки следующего обьекта класса (C++) #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, который остается в буфере ввода.
WriterMix
1 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 68
15.09.2012, 23:11  [ТС]     Ошибка ввода строки следующего обьекта класса (C++) #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, который остается в буфере ввода.
Дуже Вам вдячний за допомогу! Буду вивчати ООП дальше! Хай щастить!
Yandex
Объявления
15.09.2012, 23:11     Ошибка ввода строки следующего обьекта класса (C++)
Ответ Создать тему
Опции темы

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