9 / 9 / 3
Регистрация: 14.12.2010
Сообщений: 129
1

Ввод данных в динамический массив структур

02.03.2011, 19:47. Показов 3652. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите правильно написать функцию - сколь не пробовал, не получается - getinfo(), которая требует ввода данных о студентах. Она прекращает ввод сразу после заполнения массива или при получении пустой строки вместо имени студента. Ф-ия возвращает фактическое кол-во заполненых эл-тов массива.
Вот пример моего кода, который, правда, не работает:
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
#include <iostream>
using namespace std;
#include <cstdlib>
 
const int SLEN = 30;
struct student {
       char fullname[SLEN];
       char hobby[SLEN];
       int ooplevel;
};
int getinfo(student pa[], int n);
void display1(student st);
void display2(const student * ps);
void display3(const student pa[], int n);
 
int main()
{
    cout << "Enter class size: ";
    int class_size;
    cin >> class_size;
    while (cin.get() != '\n')
          continue;
    student * ptr_stu = new student[class_size];
    int entered = getinfo(ptr_stu, class_size);
    for (int i = 0; i < entered; i++)
    {
        display1(ptr_stu[i]);
        display2(&ptr_stu[i]);
    }
    display3(ptr_stu, entered);
    delete [] ptr_stu;
    cout << "Done\n";
    system("pause");
    return 0;
}
 
int getinfo(student pa[], int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        cout << "Enter name, hobby, ooplevel: ";
        cin.get(pa[i].fullname, SLEN);
        cin.get(pa[i].hobby, SLEN);
        cin >> pa[i].ooplevel;     
    }
    return i;
}
 
void display1(student st)
{
     cout << st.fullname << "\n";
     cout << st.hobby << "\n";
     cout << st.ooplevel << "\n";
}
 
void display2(const student * ps)
{
     cout << ps->fullname << "\n";
     cout << ps->hobby << "\n";
     cout << ps->ooplevel << "\n";
}
 
 void display3(const student pa[], int n)
 {
      for (int i = 0; i < n; i++)
      {
          cout << pa[i].fullname << "\n";
          cout << pa[i].hobby << "\n";
          cout << pa[i].ooplevel << "\n";
      }
 }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2011, 19:47
Ответы с готовыми решениями:

Чтение данных из файла в динамический массив структур
Здравствуйте, подскажите пожалуйста, как можно осуществить чтение данных из файла в динамический...

Ввод данных в динамический массив из файла
В задаче написано: введение данных в динамический массив делать из файла. Как это?

Ввод данных в динамический массив из файла
написал программу, вроде все по правилам,только почему-то каждый раз переходит по стрелке &quot;файл не...

Ввод данных в двумерный динамический массив
Добрый вечер! Осваиваю уже третий день двумерные массивы в С++, но каким образом они создаются...

3
Заблокирован
03.03.2011, 01:05 2
Попробуйте так:

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
#include <iostream>
#include<limits>
using namespace std;
#include <cstdlib>
 
const int SLEN = 30;
struct student {
       char fullname[SLEN];
       char hobby[SLEN];
       int ooplevel;
};
int getinfo(student pa[], int n);
void display1(student st);
void display2(const student * ps);
void display3(const student pa[], int n);
 
int main()
{
    cout << "Enter class size: ";
    int class_size;
    cin>>class_size;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
   
    student * ptr_stu = new student[class_size];
    int entered = getinfo(ptr_stu, class_size);
    for (int i = 0; i < entered; i++)
    {
        display1(ptr_stu[i]);
        display2(&ptr_stu[i]);
    }
    display3(ptr_stu, entered);
    delete [] ptr_stu;
    cout << "Done\n";
    system("pause");
    return 0;
}
 
int getinfo(student pa[], int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        cout << "Enter name: \t";
        cin.getline(pa[i].fullname, SLEN);
        cout << "Enter hobby: \t";
        cin.getline(pa[i].hobby, SLEN);
        cout << "Enter ooplevel: \t";
        cin >> pa[i].ooplevel; 
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
           }
    return i;
}
 
void display1(student st)
{
     cout << st.fullname << "\n";
     cout << st.hobby << "\n";
     cout << st.ooplevel << "\n";
}
 
void display2(const student * ps)
{
     cout << ps->fullname << "\n";
     cout << ps->hobby << "\n";
     cout << ps->ooplevel << "\n";
}
 
 void display3(const student pa[], int n)
 {
      for (int i = 0; i < n; i++)
      {
          cout << pa[i].fullname << "\n";
          cout << pa[i].hobby << "\n";
          cout << pa[i].ooplevel << "\n";
      }
 }
0
9 / 9 / 3
Регистрация: 14.12.2010
Сообщений: 129
03.03.2011, 15:20  [ТС] 3
Irinek,cпасибо за помощь, но ваш код не решает поставленной задачи
0
Заблокирован
03.03.2011, 16:23 4
По крайней мере, он убирает баги с вводом данных, что дает возможность решать любые задачи.
А в чем конкретно ваша задача?

Добавлено через 45 минут
Если в том, чтобы закончить ввод досрочно, то осталось дописать всего одну строку:
C++
1
if(strlen(pa[i].fullname)<1) break;
и вставить ее в нужное место (не поймите превратно):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int getinfo(student pa[], int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        cout << "Enter name: \t";
        cin.getline(pa[i].fullname, SLEN);
        if(strlen(pa[i].fullname)<1) break;
        cout << "Enter hobby: \t";
        cin.getline(pa[i].hobby, SLEN);
        cout << "Enter ooplevel: \t";
        cin >> pa[i].ooplevel; 
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
           }
    return i;
}
Для завершения проекта не мешало бы поработать еще с эстетикой вывода результатов, но это - дело вкуса.
0
03.03.2011, 16:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2011, 16:23
Помогаю со студенческими работами здесь

Динамический ввод и вывод данных в двумерный массив
Не могу реализовать ввод и вывод данных двумерного массива используя указатель на указатель, в чём...

Ввод данных/выделение памяти (динамический символьный массив)
1. Если ли разница в таких двух вариантах объявления динамического символьного массива: а) char...

Динамический массив структур в другом массиве структур
Можно ли реализовать динамический (или статический) массив структур в другом массиве структур?...

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю?
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru