Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Shpit
0 / 0 / 1
Регистрация: 15.01.2018
Сообщений: 30
1

Ошибка во время выполнения программы (структуры, массивы структур, указатели на структуру)

27.02.2018, 21:15. Просмотров 326. Ответов 1

Работаю вот с таким кодом:
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include<iostream>
#include<cstdio>
#include<conio.h>
#include<windows.h>
 
using namespace std;
 
const int N=10;
 
struct PlaneDescr  //оголошення структури
{
char *PlaneName;
float FlightDistance;
int PlaceNumb;
int EngineNumb;
double DepartureTime;
int FlightHours;
int FlightMinutes;
double ArrivalTime;
 };
 
 PlaneDescr Planes[N];      //глобальний масив з N структур типу PlaneDescr
 int poisk(int j);  //функція пошуку даних у глобальному масиві
 void print_st(int num); //функція виведення елементів структри з глобального масиву
 PlaneDescr *init_ptr(void); //функція для ініціалізації структури типу PlaneDescr
 void print_ptr(PlaneDescr *);  //Функція виведення елементів структури
 
int main()
{
    int i=0,j,a;
    PlaneDescr arrplane[N];   //масив з N структур
    PlaneDescr *arrpln[N];    //массив покажчиків на структурний тип PlaneDescr
    PlaneDescr *sptr;       //покажчик на структурний тип PlaneDescr
    sptr=arrplane;      //Аналогично sptr=&arrplan[0];
 
    while (a&&i<N)    //Введенення елементів масиву структур arrplane[N]
{
    cout<<"Введите название самолёта: ";
    cin.getline(sptr->PlaneName, sizeof(sptr->PlaneName));
    cout<<"Введите дальность полёта (через '.', в километрах): ";
    cin>>sptr->FlightDistance;
    cin.ignore();
    cout<<"Введите количество мест: ";
    cin>>sptr->PlaceNumb;
    cin.ignore();
    cout<<"Введите количество двигателей: ";
    cin>>sptr->EngineNumb;
    cin.ignore();
    cout<<"Введите время вылета (через '.'): ";
    cin>>sptr->DepartureTime;
    cin.ignore();
    cout<<"Введите количество часов, проведённых в воздухе: ";
    cin>>sptr->FlightHours;
    cin.ignore();
    cout<<"Введите количество минут, проведённых в воздухе: ";
    cin>>sptr->FlightMinutes;
    cin.ignore();
    cout<<"Введите время прибытия (через '.'): ";
    cin>>sptr->ArrivalTime;
    cin.ignore();
 
    cout<<"\nХотите ввести дополнительную информацию о самолёте? y/n"<<endl;
    char ans=getche();
    cout<<endl;
    if (ans=='n' || ans=='N') a=0;
     sptr++;//переходимо до наступної структури в масиві arrplane[N]
     i++;
   }
 
    cout<<"Вывод значений элементов массива структур arrplane[i] с использованием указателя\n ";
    j=i; sptr=&arrplane[0];
    for(i=0;i<j;i++)
    {
        print_ptr(sptr);
        arrpln[i]=new PlaneDescr; //Виділення динамічної пам'яті для структури в "кучі"
        arrpln[i]=sptr;     //Ініціалізація елементів локального масиву
        sptr++;
    }
  cout<<"Ввод недостающих значений элементов массива структур с использованием массива указателей "<<endl;
  for (i=j; i<N; i++)
      arrpln[i]=init_ptr(); //Выделение памяти для структуры в функции
  cout<<"Вывод значений элементов массива структур с использованием массива указателей\n "<<endl;
  for (i=0; i<N; i++)
   { print_ptr(arrpln[i]);
     Planes[i] = *arrpln[i]; //Инициализация элементов глобального массива cтруктур
   }
  cout<<"Вывод 3 первых значений элементов глобального массива структур\n";
  print_st(N-7);
 
  cout<<"Введите время вылета для поиска первого в массиве структур самолёта: "<<endl;
  cin>>j;
  a=poisk(j);
  if (a!=-1) print_ptr(&Planes[a]);
     else    printf("Нет таких самолётов");
  for ( i=0; i<N; i++)  delete arrpln[i]; //Освобождение памяти в "куче"
  getch();
  return 0;
}//End main()----------------------------------------------------------
 int poisk(int j)   //Функция поиска данных (data[i].day==j)
  {int a=-1;        //в глобальном массиве структур data[i]
   for (int i=0; i<N; i++)
    if (Planes[i].DepartureTime==j) { a=i;
                                        return a;}
   return a;
  }//------------------------------------------------------------
 //print_st() -Функция вывода элементов структуры из глобальнго
 void print_st(int num)            //массива, num -количество
{
    for (int i=0; i<num; i++)      //структур для вывода
    {
        cout<<"\tСамолёт"<<Planes[i].PlaneName<<" летит на расстояние "<<Planes[i].FlightDistance<<" км,"<<" перевозит "<<Planes[i].PlaceNumb<<" пассажиров,"<<endl;
        cout<<"имеет "<<Planes[i].EngineNumb<<" двигателей,"<<" вылетает в "<<Planes[i].DepartureTime<<", прибывает в "<<Planes[i].ArrivalTime<<endl;
        cout<<"и находится в воздухе "<<Planes[i].FlightHours<<" часов "<<Planes[i].FlightMinutes<<" минут."<<endl;
    }
}//------------------------------------------------------------
 //init_loc() -функция для инициализации структуры типа PlaneDescr
 PlaneDescr *init_ptr(void)
{
    PlaneDescr *spt = new PlaneDescr;      //Выделение памяти в "куче"
    cout<<"Введите название самолёта: ";
    cin.getline(spt->PlaneName, sizeof(spt->PlaneName));
    cout<<"Введите дальность полёта (через '.', в километрах): ";
    cin>>spt->FlightDistance;
    cin.ignore();
    cout<<"Введите количество мест: ";
    cin>>spt->PlaceNumb;
    cin.ignore();
    cout<<"Введите количество двигателей: ";
    cin>>spt->EngineNumb;
    cin.ignore();
    cout<<"Введите время вылета (через '.'): ";
    cin>>spt->DepartureTime;
    cin.ignore();
    cout<<"Введите количество часов, проведённых в воздухе: ";
    cin>>spt->FlightHours;
    cin.ignore();
    cout<<"Введите количество минут, проведённых в воздухе: ";
    cin>>spt->FlightMinutes;
    cin.ignore();
    cout<<"Введите время прибытия (через '.'): ";
    cin>>spt->ArrivalTime;
    cin.ignore();
    return spt;
}//------------------------------------------------------------
 void print_ptr(PlaneDescr *pdt)  //Функция вывода элементов структуры
{
    cout<<"\tСамолёт"<<pdt->PlaneName<<" летит на расстояние "<<pdt->FlightDistance<<" км,"<<" перевозит "<<pdt->PlaceNumb<<" пассажиров,"<<endl;
    cout<<"имеет "<<pdt->EngineNumb<<" двигателей,"<<" вылетает в "<<pdt->DepartureTime<<", прибывает в "<<pdt->ArrivalTime<<endl;
    cout<<"и находится в воздухе "<<pdt->FlightHours<<" часов "<<pdt->FlightMinutes<<" минут."<<endl;
}

Во время выполнения программы выдаётся ошибка. Скорее всего, что-то не так с указателями. Помогите, пожалуйста, разобраться.
0
Миниатюры
Ошибка во время выполнения программы (структуры, массивы структур, указатели на структуру)   Ошибка во время выполнения программы (структуры, массивы структур, указатели на структуру)   Ошибка во время выполнения программы (структуры, массивы структур, указатели на структуру)  

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2018, 21:15
Ответы с готовыми решениями:

Структуры, массивы, указатели, динамические массивы структур
Помогите с решением задачи (прикрепляю условие). Заранее спасибо.

Ошибка во время выполнения программы
Добрый вечер, написал код, но на последних тестах мне пишет &quot;Ошибка во время выполнения программы&quot;....

Ошибка во время выполнения программы
Начал изучать java. Нашел простенькую задачку на информатиксе и решил сделать ее. Условие:...

Ошибка во время выполнения программы
Задача: Дано действительное положительное число a и целоe число n. Вычислите an. Решение...

Ошибка во время выполнения программы
На сайте http://informatics.mccme.ru/mod/statements/view3.php?chapterid=212#1 Программа проходит...

1
Shpit
0 / 0 / 1
Регистрация: 15.01.2018
Сообщений: 30
28.02.2018, 19:19  [ТС] 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
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include<iostream>
#include<cstdio>
#include<conio.h>
#include<windows.h>
 
using namespace std;
 
const int N=10;
 
struct PlaneDescr  //объявление структуры
{
char *PlaneName;
float FlightDistance;
int PlaceNumb;
int EngineNumb;
double DepartureTime;
int FlightHours;
int FlightMinutes;
double ArrivalTime;
 };
 
 PlaneDescr Planes[N];      //Глобальный массив из N структур типа PlaneDescr
 int poisk(int j);  //Функция поиска данных в глобальный массиве 
 void print_st(int num); //Функция вывода элементов структуры из глобальнго массива
 PlaneDescr *init_ptr(void); //функция для инициализации структуры типа PlaneDescr
 void print_ptr(PlaneDescr *);  //Функция вывода элементов структуры
 
int main()
{
    int i=0,j,a;
    PlaneDescr arrplane[N];   //массив з N структур
    PlaneDescr *arrpln[N];    //массив указателей на структурный тип PlaneDescr
    PlaneDescr *sptr;       //указатель на структурний тип PlaneDescr
    sptr=arrplane;      //Аналогично sptr=&arrplan[0];
 
    while (a&&i<N)    //Ввод элементов массива структур arrplane[N]
{
    cout<<"Введите название самолёта: ";
    cin.getline(sptr->PlaneName, sizeof(sptr->PlaneName));
    cout<<"Введите дальность полёта (через '.', в километрах): ";
    cin>>sptr->FlightDistance;
    cin.ignore();
    cout<<"Введите количество мест: ";
    cin>>sptr->PlaceNumb;
    cin.ignore();
    cout<<"Введите количество двигателей: ";
    cin>>sptr->EngineNumb;
    cin.ignore();
    cout<<"Введите время вылета (через '.'): ";
    cin>>sptr->DepartureTime;
    cin.ignore();
    cout<<"Введите количество часов, проведённых в воздухе: ";
    cin>>sptr->FlightHours;
    cin.ignore();
    cout<<"Введите количество минут, проведённых в воздухе: ";
    cin>>sptr->FlightMinutes;
    cin.ignore();
    cout<<"Введите время прибытия (через '.'): ";
    cin>>sptr->ArrivalTime;
    cin.ignore();
 
    cout<<"\nХотите ввести дополнительную информацию о самолёте? y/n"<<endl;
    char ans=getche();
    cout<<endl;
    if (ans=='n' || ans=='N') a=0;
     sptr++;//переходим к следуюзей структуре в массиве arrplane[N]
     i++;
   }
 
    cout<<"Вывод значений элементов массива структур arrplane[i] с использованием указателя\n ";
    j=i; sptr=&arrplane[0];
    for(i=0;i<j;i++)
    {
        print_ptr(sptr);
        arrpln[i]=new PlaneDescr; //выделение динамической памяти для структуры в куче
        arrpln[i]=sptr;     //инициализация элементов локального массива
        sptr++;
    }
  cout<<"Ввод недостающих значений элементов массива структур с использованием массива указателей "<<endl;
  for (i=j; i<N; i++)
      arrpln[i]=init_ptr(); //Выделение памяти для структуры в функции
  cout<<"Вывод значений элементов массива структур с использованием массива указателей\n "<<endl;
  for (i=0; i<N; i++)
   { print_ptr(arrpln[i]);
     Planes[i] = *arrpln[i]; //Инициализация элементов глобального массива cтруктур
   }
  cout<<"Вывод 3 первых значений элементов глобального массива структур\n";
  print_st(N-7);
 
  cout<<"Введите время вылета для поиска первого в массиве структур самолёта: "<<endl;
  cin>>j;
  a=poisk(j);
  if (a!=-1) print_ptr(&Planes[a]);
     else    printf("Нет таких самолётов");
  for ( i=0; i<N; i++)  delete arrpln[i]; //Освобождение памяти в "куче"
  getch();
  return 0;
}//End main()----------------------------------------------------------
 int poisk(int j)   //Функция поиска данных (data[i].day==j)
  {int a=-1;        //в глобальном массиве структур data[i]
   for (int i=0; i<N; i++)
    if (Planes[i].DepartureTime==j) { a=i;
                                        return a;}
   return a;
  }//------------------------------------------------------------
 //print_st() -Функция вывода элементов структуры из глобальнго
 void print_st(int num)            //массива, num -количество
{
    for (int i=0; i<num; i++)      //структур для вывода
    {
        cout<<"\tСамолёт"<<Planes[i].PlaneName<<" летит на расстояние "<<Planes[i].FlightDistance<<" км,"<<" перевозит "<<Planes[i].PlaceNumb<<" пассажиров,"<<endl;
        cout<<"имеет "<<Planes[i].EngineNumb<<" двигателей,"<<" вылетает в "<<Planes[i].DepartureTime<<", прибывает в "<<Planes[i].ArrivalTime<<endl;
        cout<<"и находится в воздухе "<<Planes[i].FlightHours<<" часов "<<Planes[i].FlightMinutes<<" минут."<<endl;
    }
}//------------------------------------------------------------
 //init_loc() -функция для инициализации структуры типа PlaneDescr
 PlaneDescr *init_ptr(void)
{
    PlaneDescr *spt = new PlaneDescr;      //Выделение памяти в "куче"
    cout<<"Введите название самолёта: ";
    cin.getline(spt->PlaneName, sizeof(spt->PlaneName));
    cout<<"Введите дальность полёта (через '.', в километрах): ";
    cin>>spt->FlightDistance;
    cin.ignore();
    cout<<"Введите количество мест: ";
    cin>>spt->PlaceNumb;
    cin.ignore();
    cout<<"Введите количество двигателей: ";
    cin>>spt->EngineNumb;
    cin.ignore();
    cout<<"Введите время вылета (через '.'): ";
    cin>>spt->DepartureTime;
    cin.ignore();
    cout<<"Введите количество часов, проведённых в воздухе: ";
    cin>>spt->FlightHours;
    cin.ignore();
    cout<<"Введите количество минут, проведённых в воздухе: ";
    cin>>spt->FlightMinutes;
    cin.ignore();
    cout<<"Введите время прибытия (через '.'): ";
    cin>>spt->ArrivalTime;
    cin.ignore();
    return spt;
}//------------------------------------------------------------
 void print_ptr(PlaneDescr *pdt)  //Функция вывода элементов структуры
{
    cout<<"\tСамолёт"<<pdt->PlaneName<<" летит на расстояние "<<pdt->FlightDistance<<" км,"<<" перевозит "<<pdt->PlaceNumb<<" пассажиров,"<<endl;
    cout<<"имеет "<<pdt->EngineNumb<<" двигателей,"<<" вылетает в "<<pdt->DepartureTime<<", прибывает в "<<pdt->ArrivalTime<<endl;
    cout<<"и находится в воздухе "<<pdt->FlightHours<<" часов "<<pdt->FlightMinutes<<" минут."<<endl;
}
Добавлено через 21 час 52 минуты
Вопрос решён.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2018, 19:19

Ошибка во время выполнения программы.
Здравствуйте, помогите, пожалуйста, разобраться. Пытаюсь сдать задачу, из 27 тестов в трех - ошибка...

Ошибка во время выполнения программы
Уважаемые форумчане, просмотрите пожалуйста что у меня не так? Условие задачи таково: Задана...

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


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

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

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