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

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

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

Вылетает программа - C++

14.07.2013, 16:01. Просмотров 624. Ответов 8
Метки нет (Все метки)

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
#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;
        }
    }
}
 
int main()
{
    setlocale(0, "");
    check_pass();
    students Vasya;
    Vasya.nulled();
    std::string name;
    std::cout << "Введите имя: ";
    getline(std::cin,name);
    Vasya.set_name(name);
    Vasya.get_name(name); 
    std::cout << name << std::endl;
    Vasya.add_scores();
    return 0;
 
}
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
#include <string>
int *english_scores = new int[50];
int *russian_scores = new int[50];
int *math_scores = new int[50];
 
class students
{
public:
    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(std::string user_name)
    {
        return name;
    }
    void add_scores()
    {
        int user_change;
        std::cout << "Пожалуйста, выберете предмет: 1 - English; 2 - Russian; 3 - Math: ";
        std::cin >> user_change;
        if (user_change == 1)
        {
            int there_marks = 0;
            for (int i = 0; i <= 50; i++)
            {
                if (english_scores[i] != 0) { 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 + 1];
            }
        }
        if (user_change == 2)
        {
            int there_marks = 0;
            for (int i = 0; i <= 50; i++)
            {
                if (russian_scores[i] != 0) { 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 + 1];
            }
        }
        if (user_change == 3)
        {
            int there_marks = 0;
            for (int i = 0; i <= 50; i++)
            {
                if (math_scores[i] != 0) { 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 + 1];
            }
        }
    }
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;
};
Программа вылетает, когда вводишь первую оценку. (Прекращена работа...) Почему?
И второй вопрос: Оценки будут сохраняться в этой программе в private: english_scores и т.д. ?
PSS нубокод и прочее - я в курсе, я учусь..)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 16:01     Вылетает программа
Посмотрите здесь:

C++ Программа вылетает
программа вылетает. C++
Вылетает программа C++
C++ Вылетает программа
C++ Вылетает программа
C++ Вылетает программа
C++ Вылетает программа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
14.07.2013, 16:36     Вылетает программа #2
Цитата Сообщение от M1ronz0r Посмотреть сообщение
Vasya.get_name(name);
неверно! надо name=Vasya.get_name(); У тебя в было неверно, но выводилось имя и всё работало просто потому, что и переменная name и Vasya.name имели одинаковое значение ещё до вызова getname

Добавлено через 29 секунд
Цитата Сообщение от M1ronz0r Посмотреть сообщение
std::string get_name(std::string user_name)
* * {
* * * * return name;
* * }
верно будет
C++
1
2
3
4
std::string get_name()
* * {
* * * * return name;
* * }
Добавлено через 4 минуты
Цитата Сообщение от M1ronz0r Посмотреть сообщение
*english_scores[0];
зачем ставить *, если индексация и так разименовывает указатель?
то есть english_scores[0]; это и есть оценка, что надо ввести!
Правильно: cin>>english_scores[0];
Или эквивалентная этому запись есть:
cin>>*english_scores;
Но никак не:
*english_scores[0]; это бред какой-то
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
14.07.2013, 18:05  [ТС]     Вылетает программа #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
неверно! надо name=Vasya.get_name(); У тебя в было неверно, но выводилось имя и всё работало просто потому, что и переменная name и Vasya.name имели одинаковое значение ещё до вызова getname

Добавлено через 29 секунд
верно будет
C++
1
2
3
4
std::string get_name()
* * {
* * * * return name;
* * }
Добавлено через 4 минуты

зачем ставить *, если индексация и так разименовывает указатель?
то есть english_scores[0]; это и есть оценка, что надо ввести!
Правильно: cin>>english_scores[0];
Или эквивалентная этому запись есть:
cin>>*english_scores;
Но никак не:
*english_scores[0]; это бред какой-то
C++
1
std::cin >> *english_scores;
classi\students.h(46) : error C2679: бинарный '>>': не найден оператор, принимающий правый операнд типа 'int *' (или приемлемое преобразование отсутствует)

C++
1
std::cin >> russian_scores[0];
classi\classi\students.h(68) : error C2679: бинарный '>>': не найден оператор, принимающий правый операнд типа 'int *' (или приемлемое преобразование отсутствует)

не нравится ей такое =(
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
14.07.2013, 18:15     Вылетает программа #4
да потому что тут вообще бреда нагорожено.
В одном месте объявлены ГЛОБАЛЬНЫЕ int *english_scores = new int[50]; (а что сразу статический массив не объявить было?)
Но это ещё что...
Пока я смотрел на эти глобальные переменные, оказалось, что в классе объявлены ТОЧНО ТАКИЕ ЖЕ ПОЛЯ!!!
C++
1
2
3
4
5
6
7
  class students
{
public:
   int *english_scores[50];
    int *russian_scores[50];
    int *math_scores[50];
...
Это вообще бред. Это массивы указателей? Что они содержат? Массив динамических массивов? Что за бред? При чём тут оценки ОДНОГО ученика?!

Добавлено через 3 минуты
Срочно Удаляй глобальные переменные.
Срочно превращай все эти массивы указателей
ЛИБО в статические одномерные массивы,
ЛИБО в указатели на динамический массив,
НО НЕ ОДНОВРЕМЕННО.
А то, что память не освобождается после new это уже такие мелочи на фоне всего прочего...
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
14.07.2013, 18:25  [ТС]     Вылетает программа #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Срочно Удаляй глобальные переменные.
удалил.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Срочно превращай все эти массивы указателей
ЛИБО в статические одномерные массивы,
Сделал

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
При чём тут оценки ОДНОГО ученика?!
нуу, это же класс студентов, которые получают оценки и у каждого есть свойство "Оценки по тому или иному предмету"

Я делал динамические массивы, потому что планировал сделать динамическое изменение массива, в зависимости от кол-ва оценок, но потом передумал, а массивы оставил.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ЛИБО в указатели на динамический массив,
Можно подробнее об этой штуке?

Цитата Сообщение от M1ronz0r Посмотреть сообщение
И второй вопрос: Оценки будут сохраняться в этой программе в private: english_scores и т.д. ?
И на этот вопрос можно ответ?

Добавлено через 27 секунд
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
#include <string>
 
class students
{
public:
    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 add_scores()
    {
        int user_change;
        std::cout << "Пожалуйста, выберете предмет: 1 - English; 2 - Russian; 3 - Math: ";
        std::cin >> user_change;
        if (user_change == 1)
        {
            int there_marks = 0;
            for (int i = 0; i <= 50; i++)
            {
                if (english_scores[i] != 0) { 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 + 1];
            }
        }
        if (user_change == 2)
        {
            int there_marks = 0;
            for (int i = 0; i <= 50; i++)
            {
                if (russian_scores[i] != 0) { 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 + 1];
            }
        }
        if (user_change == 3)
        {
            int there_marks = 0;
            for (int i = 0; i <= 50; i++)
            {
                if (math_scores[i] != 0) { 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 + 1];
            }
        }
    }
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;
};
теперь так вот
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
14.07.2013, 18:44     Вылетает программа #6
Цитата Сообщение от M1ronz0r Посмотреть сообщение
теперь так вот
ну и нормально. Вот ты выбрал хранить оценки в статическом массиве. Имеешь право.
В обморок от такой программы уже не упадёшь.

Добавлено через 9 минут
Просто надо понимать, Что такая запись
C++
1
2
3
4
5
6
class student{
public:
string name;
int scores[50];
////...
};
Такая запись описывает тип данных, в котором может храниться только один ученик!!!
Надо понимать, что что бы где-то появились данные об одном ученике нужно ПОСЛЕ этого объявить локально или глобально переменную. Переменная будет ЭКЗЕМПЛЯРОМ этого класса. И вообще теперь тип student будет использоваться точно так же, как использовались встроенные типы.
C++
1
2
3
4
5
6
7
8
int main(){
  int number;
  student Vasya;//student это тип данных. Vasya - один экземпляр студента.
  Student Petya;
  //у каждого экземпляра поля свои.
  //name и scores это не глобальные переменные. Их значения у каждого своё.
  Vasya.scores[0]=2;
  Petya.scores[0]=5;//у каждой переменной типа student свои scores
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
14.07.2013, 19:12  [ТС]     Вылетает программа #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ну и нормально. Вот ты выбрал хранить оценки в статическом массиве. Имеешь право.
В обморок от такой программы уже не упадёшь.

Добавлено через 9 минут
Просто надо понимать, Что такая запись
C++
1
2
3
4
5
6
class student{
public:
string name;
int scores[50];
////...
};
Такая запись описывает тип данных, в котором может храниться только один ученик!!!
Надо понимать, что что бы где-то появились данные об одном ученике нужно ПОСЛЕ этого объявить локально или глобально переменную. Переменная будет ЭКЗЕМПЛЯРОМ этого класса. И вообще теперь тип student будет использоваться точно так же, как использовались встроенные типы.
C++
1
2
3
4
5
6
7
8
int main(){
  int number;
  student Vasya;//student это тип данных. Vasya - один экземпляр студента.
  Student Petya;
  //у каждого экземпляра поля свои.
  //name и scores это не глобальные переменные. Их значения у каждого своё.
  Vasya.scores[0]=2;
  Petya.scores[0]=5;//у каждой переменной типа student свои scores
C++
1
2
3
4
5
6
class student{
public:
string name;
int scores[50];
////...
};
Как же сделать, чтобы не один?
Я добавляю students Petya и делаю все тоже, что и с Васей, но для Пети значение имени пропускается, а с оценками норм все.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
14.07.2013, 19:20     Вылетает программа #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
student* StudClass;//указатель на динамический массив студентов
int StudClass_size;//его размер
int main(){
  cin>>StudClass_size;//введите количество студентов
  StudClass=new student[StudClass_size];
  for (int i=0; i<StudClass_size; i++){
     cin>>StudClass[i].name;
     for (int j=0; j<50; j++)cin>>StudClass[i].scores[j];
  }
 
  delete[] StudClass;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2013, 19:33     Вылетает программа
Еще ссылки по теме:

Программа С++ вылетает C++
C++ Вылетает программа
C++ Вылетает программа
Вылетает программа C++
Вылетает программа C++

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

Или воспользуйтесь поиском по форуму:
M1ronz0r
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 69
14.07.2013, 19:33  [ТС]     Вылетает программа #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
student* StudClass;//указатель на динамический массив студентов
int StudClass_size;//его размер
int main(){
  cin>>StudClass_size;//введите количество студентов
  StudClass=new student[StudClass_size];
  for (int i=0; i<StudClass_size; i++){
     cin>>StudClass[i].name;
     for (int j=0; j<50; j++)cin>>StudClass[i].scores[j];
  }
 
  delete[] StudClass;
}
спасибо
Yandex
Объявления
14.07.2013, 19:33     Вылетает программа
Ответ Создать тему
Опции темы

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