Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
DEMONVoz
0 / 0 / 0
Регистрация: 23.11.2016
Сообщений: 18
#1

Ввод данных в структуру через указатель на структуру

16.03.2017, 21:01. Просмотров 813. Ответов 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
#include "stdafx.h"
#include "ctime"
#include "iostream"
#pragma warning(disable : 4996)
 
using namespace std;
 
class Students {
    char *name;
    char *sex;
    int age;
 
public:
    Students() {};
 
    Students(char *name, char *sex, int age) : age(age)
    {
        this->name = new char[strlen(name) + 1];
        strcpy(this->name, name);
        this->sex = new char[strlen(sex) + 1];
        strcpy(this->sex, sex);
    }
    Students(const Students &p1) {
        age = p1.age;
        name = new char[strlen(p1.name) + 1];
        strcpy(name, p1.name);
        name = new char[strlen(p1.sex) + 1];
        strcpy(sex, p1.sex);
    }
    Students::Students(int n) 
    {
        age = n;
    }
 
    
    void setName(char*name) {
        if (strlen(this->name) != strlen(name)) {
            delete[] this->name;
            this->name = new char[strlen(name) + 1];
            strcpy(this->name, name);
        }
    }
                                
    void setSex(char*sex) {
        if (strlen(this->sex) != strlen(sex)) {
            delete[] this->sex;
            this->sex = new char[strlen(sex) + 1];
            strcpy(this->sex, sex);
        }
    }
    void setAge(int age) { this->age = age; }
    char* getName() { return name; }
    char* getSex() { return sex; }
    int getAge() { return age; }
};
int main()
{
    setlocale(0, "rus");
    
    Students p[5];
    Students *ptr2 = new Students();
    
    char sex[1000];
    char name[1000];
    int n = 0, sum = 0;
    
    for (int i = 0; i < 5; i++) {               
        cout << "Введите имя: ";
        cin.getline(name, 1000);
        ptr2[i].setName(name);
        cin.get();
        
        cout << "Введите пол: ";
        cin.getline(sex, 1000);
        ptr2[i].setSex(sex);
        cin.get();
        
        cout << "Введите возраст: ";
        cin >> n;
        ptr2[i].setAge(n);
        cin.get();
        
        sum += n;
 
            cout << "\tИмя: " << ptr2[i].getName() << endl;
            cout << "\tПол: " << ptr2[i].getSex() << endl;
            cout << "\tВозраст " << ptr2[i].getAge() << endl;
 
    }
    cout << "Средний возраст = " << sum / 5 << endl;
    
    system("pause");
    return 0;
}
как я понял - sex не может получить доступ к ячейке памяти. ткните носом где я ошибся.
заранее спасибо

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2017, 21:01
Ответы с готовыми решениями:

Доступ к элементам структуры через указатель на структуру
Не могу понять, где ошибка... В файле информация о двух людях. В конечном...

Доступ к элементам структуры через указатель на структуру
Как делается доступ к элементам структуры через указатель на структуру. Вроде...

Как обратиться к полям структуры через указатель и объявление указателя на структуру
Как обратиться к полям структуры через указатель и объявление указателя на...

Не работает ввод данных в структуру
Не работает ввод данных в структуру. Программа вылетает при первом вводе. ...

Ввод данных в структуру из файла
Народ, помогите разобраться. В общем есть структура следующего вида: struct...

4
zss
Модератор
Эксперт С++
6989 / 6551 / 4154
Регистрация: 18.12.2011
Сообщений: 17,286
Завершенные тесты: 1
16.03.2017, 21:59 #2
Цитата Сообщение от DEMONVoz Посмотреть сообщение
C++
1
Students p[5];
Нигде не используется
Цитата Сообщение от DEMONVoz Посмотреть сообщение
Students *ptr2 = new Students();[/CPP]
Вызывается конструктор по умолчанию и создается ОДИН объект.
Поэтому есть только ptr2[0].
C++
1
Students *ptr2 = new Students[5];
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void setName(char*name) {
        if (strlen(this->name) != strlen(name)) {
            delete[] this->name;
            this->name = new char[strlen(name) + 1];
        }
        strcpy(this->name, name);
    }
                                
    void setSex(char*sex) {
        if (strlen(this->sex) != strlen(sex)) {
            delete[] this->sex;
            this->sex = new char[strlen(sex) + 1];
        }
        strcpy(this->sex, sex);
    }
1
Selot
189 / 125 / 52
Регистрация: 19.01.2010
Сообщений: 508
Завершенные тесты: 2
16.03.2017, 21:59 #3
61 строка не нужна. В цикле, вместо "ptr2" написать "p"
0
zss
Модератор
Эксперт С++
6989 / 6551 / 4154
Регистрация: 18.12.2011
Сообщений: 17,286
Завершенные тесты: 1
16.03.2017, 22:20 #4
Лучший ответ Сообщение было отмечено DEMONVoz как решение

Решение

С учетом всех остальных блох:
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
//#include "stdafx.h"
#include <ctime>
#include <iostream>
#pragma warning(disable : 4996)
 
using namespace std;
 
class Students {
    char *name;
    char *sex;
    int age;
 
public:
    Students():age(0){
        name=new char[1];
        *name=0;
        sex=new char[1];
        *sex=0;
    }
 
    Students(char *name, char *sex, int age) : age(age)
    {
        this->name = new char[strlen(name) + 1];
        strcpy(this->name, name);
        this->sex = new char[strlen(sex) + 1];
        strcpy(this->sex, sex);
    }
    Students(const Students &p1) {
        age = p1.age;
        name = new char[strlen(p1.name) + 1];
        strcpy(name, p1.name);
        name = new char[strlen(p1.sex) + 1];
        strcpy(sex, p1.sex);
    }
    
    void setName(char*name) {
        if (strlen(this->name) != strlen(name)) {
            delete[] this->name;
            this->name = new char[strlen(name) + 1];
        }
        strcpy(this->name, name);
    }
 
    void setSex(char*sex) {
        if (strlen(this->sex) != strlen(sex)) {
            delete[] this->sex;
            this->sex = new char[strlen(sex) + 1];
        }
        strcpy(this->sex, sex);
    }
    void setAge(int age) { this->age = age; }
    char* getName() { return name; }
    char* getSex() { return sex; }
    int getAge() { return age; }
};
int main()
{
    setlocale(0, "rus");
 
    Students p[5];
    Students *ptr2;
 
    char sex[1000];
    char name[1000];
    int n = 0, sum = 0;
 
    for (ptr2=p; ptr2!=p+5; ++ptr2) {               
        cout << "Введите имя: ";
        cin.getline(name, 1000);
        ptr2->setName(name);
        //cin.get();
 
        cout << "Введите пол: ";
        cin.getline(sex, 1000);
        ptr2->setSex(sex);
        //cin.get();
 
        cout << "Введите возраст: ";
        cin >> n;
        ptr2->setAge(n);
        cin.get();
 
        sum += n;
 
        cout << "\tИмя: " << ptr2->getName() << endl;
        cout << "\tПол: " << ptr2->getSex() << endl;
        cout << "\tВозраст " << ptr2->getAge() << endl;
 
    }
    cout << "Средний возраст = " << sum / 5 << endl;
 
    system("pause");
    return 0;
}
0
DEMONVoz
0 / 0 / 0
Регистрация: 23.11.2016
Сообщений: 18
16.03.2017, 22:27  [ТС] #5
работает. всем огромное спасибо
0
16.03.2017, 22:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2017, 22:27

Ввод/вывод данных в структуру
Доброго времени суток уважаемые форумчане. Подскажите есть у меня такое вот...

Ввод данных в структуру - cin.getline
Добрый день, Задача загрузить информацию в структуку Songs (автор, имя, год)...

Ввод с клавиатуры данных и запись их в структуру
Помогите,пожалуйста. Нужно добавить запись с информацией о студенте и его ...


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

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

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