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

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

Войти
Регистрация
Восстановить пароль
 
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
#1

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

16.07.2013, 12:30. Просмотров 480. Ответов 13
Метки нет (Все метки)

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 раз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 12:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не создается второй объект класса? (C++):

Не создается объект класса - C++
Почему я не могу создать объект класса Zamovlena? Могу создать только указатель. Zamovlena.h #ifndef ZAMOVLENA_H #define ZAMOVLENA_H ...

Создается объект абстрактного класса:( - C++
Вот допустим у меня есть класс: class Cell { public: Cell() {} ~Cell() {} virtual std::string getData() const = 0; }; Ну...

4 раза в памяти создается объект класса - C++
Доброго времени суток! Есть следующий код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...

Зачем для указателя на объект класса создается отдельный класс - C++
Читаю книгу Джефа Элджера &quot;Библиотека программиста С++&quot;, там в главе про умные указатели приводится пример, где для указателя на класс...

Класс: строка. Не считывает данные во второй объект класса! - C++
Ребят, собственно, я упускаю, видимо, какую-то важную деталь, только КАКУЮ? В первый объект считывается строка, всё здорово, отображается -...

интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект - C++
Привет всем. Необходимо реализовать интерфейс, в методе которого создается объект типа IDictionary и возвращается ссылка на этот объект. Не...

13
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.07.2013, 12:33 #2
Цитата Сообщение от M1ronz0r Посмотреть сообщение
if (user_change = 1)
программа вообще виснет в бесконечной рекурсии.
сравнение - ==
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)
компилятор сругается на немодифицируемое значение.
а во втором случае он это проглотик, как будто так и надо и вам ничего не скажет. и будете вы искать ошибку до второго пришествия.
приучайтесь писать так везде и в циклах тоже.
0
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 12:59  [ТС] #4
я исправил эту ошибку, но проблему не устранило
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 13:21 #5
Попробуйте так:
C++
1
(std::cin >> user_change).get();
0
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 13:27  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Попробуйте так:
Код C++
1
(std::cin >> user_change).get();
вместо чего это?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 13:30 #7
Вместо этого (в new_student()):
C++
1
std::cin >> user_change;
И русский ввод добавьте.
0
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()
Я не понимаю еще этого =(
0
Aleator
65 / 60 / 3
Регистрация: 04.05.2011
Сообщений: 1,214
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();
    }
}
0
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();
    }
}
не лечицо.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.07.2013, 14:01 #11
Цитата Сообщение от M1ronz0r Посмотреть сообщение
не работает.
У меня всё работает.
1
Миниатюры
Почему не создается второй объект класса?  
Aleator
65 / 60 / 3
Регистрация: 04.05.2011
Сообщений: 1,214
16.07.2013, 14:02 #12
Проблема в чём -то ещё?
1
Миниатюры
Почему не создается второй объект класса?  
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
16.07.2013, 14:06  [ТС] #13
Извиняюсь. Я без cout делал же и забыл, что там нужно еще единичку вводить
Можете объяснить эту строку? Для чего она?
C++
1
    std::cin.ignore(256, '\n');
0
Aleator
65 / 60 / 3
Регистрация: 04.05.2011
Сообщений: 1,214
16.07.2013, 14:10 #14
Тут подробное описание причины проблемы: http://augustcouncil.com/~tgibson/tutorial/iotips.html#problems
1
16.07.2013, 14:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 14:10
Привет! Вот еще темы с ответами:

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

Не создается объект - C++
Есть абстрактный класс от него 2 наследника. В этом классе есть итератор вершин графа template &lt;class Vertex, class Edge&gt; class ABCG { ...

Статический объект в статической библиотеке не создается - C++
Есть статическая библиотека. В ней статически создаю синглтон: static Singleton &amp;data = Singleton::getInstance(); Т.к. это глобальный...

Ошибка компиляции (преобразование объекта класса в объект другого класса) - C++
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но...


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

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

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