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

Почему не создается второй объект класса? - C++

Восстановить пароль Регистрация
 
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 12:30     Почему не создается второй объект класса? #1
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
#include <string>
// Заголовочный файл students.h
class students
{
public:
    students(std::string user_name, std::string user_last_name)
    {
        set_name(user_name);
        set_last_name(user_last_name);
        nulled();
        std::cout << "Данные: " << get_name() << " " << get_last_name() << std::endl;
    }
    ~students()
    {
        std::cout << "Student deleted" << std::endl;
    }
    void nulled() //После создания объекта использовать эту функцию! (Обязательно.)
    {
        for (int i = 0; i < 50; i++)
        {
            english_scores[i] = 0;
            russian_scores[i] = 0;
            math_scores[i] = 0;
        }
    }
    /*int save_marks(int mass_marks[50])
    {
 
        return mass_marks[50];
    }*/
    void set_name(std::string user_name)
    {
        name = user_name;
    }
    std::string get_name()
    {
        return name;
    }
    void set_last_name(std::string user_last_name)
    {
        last_name = user_last_name;
    }
    std::string get_last_name()
    {
        return last_name;
    }
    void add_scores()
    {
        int user_change;
        std::cout << "Пожалуйста, выберете предмет: 1 - English; 2 - Russian; 3 - Math: ";
        std::cin >> user_change;
        if (user_change < 1 || user_change > 3) { add_scores(); }
        if (user_change == 1)
        {
            int there_marks = 0;
            for (int i = 0; i < 50; i++)
            {
                if (english_scores[i] > 0 && english_scores[i] < 6) { there_marks = there_marks + 1; }
            }
            if (there_marks == 0)
            {
                std::cout << "Введите первую оценку по английскому: ";
                std::cin >> english_scores[0];
            }
            else
            {
                std::cout << "Все оценки ученика по английскому: ";
                for (int i = 0; i < there_marks; i++)
                {
                        std::cout << english_scores[i] << " ";
                }
                std::cin >> english_scores[there_marks];
            }
        }
        if (user_change == 2)
        {
            int there_marks = 0;
            for (int i = 0; i < 50; i++)
            {
                if (russian_scores[i] > 0 && russian_scores[i] < 6) { there_marks = there_marks + 1; }
            }
            if (there_marks == 0)
            {
                std::cout << "Введите первую оценку по русскому: ";
                std::cin >> russian_scores[0];
            }
            else
            {
                std::cout << "Все оценки ученика по русскому: ";
                for (int i = 0; i < there_marks; i++)
                {
                        std::cout << russian_scores[i] << " ";
                }
                std::cin >> russian_scores[there_marks];
            }
        }
        if (user_change == 3)
        {
            int there_marks = 0;
            for (int i = 0; i < 50; i++)
            {
                if (math_scores[i] > 0 && math_scores[i] < 6) { there_marks = there_marks + 1; }
            }
            if (there_marks == 0)
            {
                std::cout << "Введите первую оценку по математике: ";
                std::cin >> math_scores[0];
            }
            else
            {
                std::cout << "Все оценки ученика по математике: ";
                for (int i = 0; i < there_marks; i++)
                {
                        std::cout << math_scores[i] << " ";
                }
                std::cin >> math_scores[there_marks];
            }
        }
        std::cout << "Еще будем? 1 - Да; 0 - нет ";
        std::cin >> user_change;
        if (user_change == 1) { add_scores(); }
    }
private:
    std::string name;
    std::string last_name;
    std::string english;
    std::string russian;
    std::string math;
    std::string klassnaya;
    int english_scores[50];
    int russian_scores[50];
    int math_scores[50];
    float average_math;
    float average_english;
    float average_russian;
};
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
#include <iostream>
#include <string>
#include "students.h"
int *schetchik = new int(1);
bool truepass (std::string passwordf)
{
    std::string password = "qwerty";
    if (password == passwordf) {
        return true;
    }
    else {
        return false;
    }
}
void check_pass()
{
    std::string user_password;
    std::cout << "Пожалуйста, введите пароль: ";
    getline(std::cin,user_password);
    if ( *schetchik == 3) 
    {
        std::cout << "Отказано в доступе." << std::endl;
        delete schetchik;
    }
    else 
    {
        if (!truepass(user_password))
        {
            std::cout << "Пароль неверный!" << std::endl;
            *schetchik = *schetchik + 1;
            check_pass(); 
        }
        else 
        {
            std:: cout << "Доступ получен!" << std::endl;
            delete schetchik;
        }
    }
}
 
void new_student() // Эта функция работает только 1 раз, второй раз - некорректно (Вводится только имя)
{
    std::string name;
    std::cout << "Введите имя нового студента: ";
    getline(std::cin,name);
    std::string last_name;
    std::cout << "Введите фамилию нового студента: ";
    getline(std::cin,last_name);
    students *Student = new students(name,last_name);
    Student->nulled();
    delete Student;
    int user_change;
    std::cin >> user_change;
    if (user_change = 1) { new_student(); }
}
 
int main()
{
    setlocale(0, "");
    //check_pass();
    new_student();
    /*std::string name;
    getline(std::cin,name);
    std::string last_name;
    getline(std::cin,last_name);
    students *Vasya = new students(name,last_name);*/
    //Vasya->add_scores();
    return 0;
 
}
Функция void new_student() создает объект только 1 раз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.07.2013, 12:33     Почему не создается второй объект класса? #2
Цитата Сообщение от M1ronz0r Посмотреть сообщение
if (user_change = 1)
программа вообще виснет в бесконечной рекурсии.
сравнение - ==
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
16.07.2013, 12:47     Почему не создается второй объект класса? #3
лучше сравнивать так:
Код
int a = 1;
if (1 == a) {
}
сравните с:
Код
int a = 1;
if (a == 1) {
}
тогда вы не сможете сделать такой ошибки в первом варианте:
Код
if (1 = a)
компилятор сругается на немодифицируемое значение.
а во втором случае он это проглотик, как будто так и надо и вам ничего не скажет. и будете вы искать ошибку до второго пришествия.
приучайтесь писать так везде и в циклах тоже.
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 12:59  [ТС]     Почему не создается второй объект класса? #4
я исправил эту ошибку, но проблему не устранило
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 13:21     Почему не создается второй объект класса? #5
Попробуйте так:
C++
1
(std::cin >> user_change).get();
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 13:27  [ТС]     Почему не создается второй объект класса? #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Попробуйте так:
Код C++
1
(std::cin >> user_change).get();
вместо чего это?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 13:30     Почему не создается второй объект класса? #7
Вместо этого (в new_student()):
C++
1
std::cin >> user_change;
И русский ввод добавьте.
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 13:40  [ТС]     Почему не создается второй объект класса? #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void new_student()
{
    std::string name;
    std::cout << "Введите имя нового студента: ";
    getline(std::cin,name);
    std::string last_name;
    std::cout << "Введите фамилию нового студента: ";
    getline(std::cin,last_name);
    students *Student = new students(name,last_name);
    Student->nulled();
    delete Student;
    int user_change;
    (std::cin >> user_change).get();
    if (user_change == 1) { new_student(); }
}
не работает. А можете объяснить эту строку?
C++
1
(std::cin >> user_change).get();
1. Зачем первые скобки? Что они дают.
2. Что такое .get()
Я не понимаю еще этого =(
Aleator
 Аватар для Aleator
66 / 66 / 3
Регистрация: 04.05.2011
Сообщений: 1,146
16.07.2013, 13:47     Почему не создается второй объект класса? #9
Лечение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void new_student() // Эта функция работает только 1 раз, второй раз - некорректно (Вводится только имя)
{
    std::string name;
    std::string last_name;
 
    std::cout << "Введите имя нового студента: ";
    getline(std::cin,name);
 
    std::cout << "Введите фамилию нового студента: ";
    getline(std::cin,last_name);
 
    students *Student = new students(name,last_name);
    Student->nulled();
    delete Student;
    int user_change;
    std::cin >> user_change;
    if (user_change == 1) { 
        std::cin.ignore(256, '\n');         
        new_student();
    }
}
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 13:54  [ТС]     Почему не создается второй объект класса? #10
Цитата Сообщение от Aleator Посмотреть сообщение
Лечение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void new_student() // Эта функция работает только 1 раз, второй раз - некорректно (Вводится только имя)
{
    std::string name;
    std::string last_name;
 
    std::cout << "Введите имя нового студента: ";
    getline(std::cin,name);
 
    std::cout << "Введите фамилию нового студента: ";
    getline(std::cin,last_name);
 
    students *Student = new students(name,last_name);
    Student->nulled();
    delete Student;
    int user_change;
    std::cin >> user_change;
    if (user_change == 1) { 
        std::cin.ignore(256, '\n');         
        new_student();
    }
}
не лечицо.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 14:01     Почему не создается второй объект класса? #11
Цитата Сообщение от M1ronz0r Посмотреть сообщение
не работает.
У меня всё работает.
Миниатюры
Почему не создается второй объект класса?  
Aleator
 Аватар для Aleator
66 / 66 / 3
Регистрация: 04.05.2011
Сообщений: 1,146
16.07.2013, 14:02     Почему не создается второй объект класса? #12
Проблема в чём -то ещё?
Миниатюры
Почему не создается второй объект класса?  
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 14:06  [ТС]     Почему не создается второй объект класса? #13
Извиняюсь. Я без cout делал же и забыл, что там нужно еще единичку вводить
Можете объяснить эту строку? Для чего она?
C++
1
    std::cin.ignore(256, '\n');
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 14:10     Почему не создается второй объект класса?
Еще ссылки по теме:

Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй ис C++
4 раза в памяти создается объект класса C++
Указатель на объект базового класса и адрес объекта производного класса C++

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

Или воспользуйтесь поиском по форуму:
Aleator
 Аватар для Aleator
66 / 66 / 3
Регистрация: 04.05.2011
Сообщений: 1,146
16.07.2013, 14:10     Почему не создается второй объект класса? #14
Тут подробное описание причины проблемы: http://augustcouncil.com/~tgibson/tu....html#problems
Yandex
Объявления
16.07.2013, 14:10     Почему не создается второй объект класса?
Ответ Создать тему
Опции темы

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