Код:
#include <iostream>
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <cstring>
struct Time
{
int h;
int m;
};
struct Train {
char appointed[40];
Time time;
int number;
} ;
int menuTitle(void){
int c;
printf("1. Ввод новых записей\n");
printf("2. Просмотр списка\n");
printf("3. Удаление записи из списка\n");
printf("4. Добавление записи в список\n");
printf("5. В файл\n");
printf("6. Из файла\n");
printf("7. Поиск записей\n");
printf("8. Сортировка списка\n");
printf("9. Выход\n");
do {
printf("Введите номер нужного пункта: ");
std::cin >> c;
} while(c < 1 || c > 9);
return c;
}
void increaseSizeList(Train** train, int *max_size, int size, int n)
{
while(n>=*max_size)
{
*max_size = *max_size * 2;
}
*max_size = *max_size * 2;
Train *train1 = new Train[n];
for (int i = 0;i<size;i++)
{
train1[i] = *train[i];
}
delete[]train;
*train = train1;
}
Train createRecord() {
Train adr;
std::cout << "Введите номер поезда: ";std::cin >> adr.number;
std::cout << "Введите пункт назначения: "; std::cin >> adr.appointed;
std::cout << "Введите час : "; std::cin >> adr.time.h;
std::cout << "Введите минуты : "; std::cin >> adr.time.m;
return adr;
}
int enter(Train **train, int * max_size, int size){
int n;
std::cout<<" Введите число новых записей\n";
std::cin>> n;
for(int i = 0; i < n; i++)
{
*train[i] = createRecord();
}
return n;
}
void printList(Train *train, int size){
for(int i = 0; i < size; i++)
{
std::cout << train[i].number << " " << train[i].appointed << " " << train[i].time.h << ":" << train[i].time.m << std::endl << std::endl;
}
// красивый вывод содержимого массива
}
void deleteRecord(Train* train, int num, int size){
// удалить существующую запись со сдвигом
}
void addRecord(Train** train, int max_size, int *size){
// добавить в конец массива новую запись, если необходимо размер массива увеличить
}
void inFile(Train* train, int max_size, int size){
std::ofstream out;
out.open("train2.txt", std::ios::out);
// запись в файл
out.close();
}
int fromFile(Train** train, int *max_size, int *size){
std::fstream in;
// чтение из файла
return 0;
}
void findRecords(Train* train, int size){
char appointed[40];
std::cout << "Введите город "; std::cin>> appointed;
// найти запись и вывести (использовать ф-цию compare)
}
int compare(const void * left, const void * right){ //для qsort
if (strcmp(((Train*)left)->appointed, ((Train*)right)->appointed) == 1 )
return 1;
if (strcmp(((Train*)left)->appointed, ((Train*)right)->appointed) == 0 && strcmp(((Train*)left)->appointed, ((Train*)right)->appointed) == 1 )
return 1;
return 0;
}
int compare(Train adr, char *appointed){ // для поиска
if (strcmp(adr.appointed, appointed) == 0 )
return 1;
return 0;
}
void sort (Train* train, int size){
//выполнить сортировку с помощью функции qsort
std::qsort(train, size, sizeof *train, compare);
}
void mySort (Train * train, int size){
//выполнить сортировку, реализовать алгоритм сортировки (Сортировка вставками или Сортировка слиянием или Быстрая сортировка (Quicksort) или любую другую
}
int menu(Train *train, int max_size, int size){
for(;;) {
char choice = menuTitle();
switch(choice) {
case 1: size = enter(&train, &max_size, size);
break;
case 2: printList(train, size);
break;
case 3:
printf("\nВведите номер удаляемой записи: ");
int num;
std::cin >> num;
deleteRecord(train, num, size);
size--;
break;
case 4: addRecord(&train, max_size, &size);
break;
case 5: inFile(train, max_size, size);
break;
case 6: fromFile(&train, &max_size, &size);
break;
case 7: findRecords(train, size);
break;
case 8: sort(train, size);
break;
case 9: exit(0);
delete[]train;
break;
}
}
}
int main(void)
{
setlocale(0,"");
int max_size = 5; // мах зарезервированное количество записей в списке поездов
int size = 0; // всего записей в списке = size (номер новой будущей записи в списке)
Train * train = new Train[max_size]; // массив для хранения списка поездов
menu(train, max_size, size);
}
Если я ввожу 2 новые записи, и потом вывожу, у меня выводит только одну, а остальные пустые, в чем может быть проблема?