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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
v0l0d1ka
9 / 9 / 0
Регистрация: 14.12.2010
Сообщений: 129
#1

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

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

Помогите правильно написать функцию - сколь не пробовал, не получается - 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 19:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ввод данных в динамический массив структур (C++):

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

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

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

Динамический ввод и вывод данных в двумерный массив - C++
Не могу реализовать ввод и вывод данных двумерного массива используя указатель на указатель, в чём проблема? cin &gt;&gt; *(*(p+n*i)+j); ...

Ввод данных/выделение памяти (динамический символьный массив) - C++
1. Если ли разница в таких двух вариантах объявления динамического символьного массива: а) char *string = (char*) malloc(N); б) char...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IrineK
Заблокирован
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
v0l0d1ka
9 / 9 / 0
Регистрация: 14.12.2010
Сообщений: 129
03.03.2011, 15:20  [ТС] #3
Irinek,cпасибо за помощь, но ваш код не решает поставленной задачи
0
IrineK
Заблокирован
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2011, 16:23
Привет! Вот еще темы с ответами:

Динамический массив структур - C++
Нужно сделать динамический массив структур. Задание составить перечень стран и количество автомобилей выпущенных этими странами. ...

Динамический массив структур - C++
Нужно создать базу данных библиотеки состоящую из структур: книга, автор, количество читателей взявших эту книгу. Реализовать функции:...

Динамический массив структур ... - C++
Как создать дин. массив структур....пользователь должен ввести число этих массивов. вот что-то пробовал , но много ошибок выпрыгивает ...

Динамический массив структур - C++
Нужно создать базу данных библиотеки состоящую из структур: книга, автор, количество читателей взявших эту книгу. Реализовать функции:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.03.2011, 16:23
Ответ Создать тему
Опции темы

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