Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2018, 10:48   #1
uppupp
 
Регистрация: 05.10.2018
Сообщений: 5
По умолчанию Вывод массива структур

Код:
#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 новые записи, и потом вывожу, у меня выводит только одну, а остальные пустые, в чем может быть проблема?
uppupp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива структур MyLifeStyle Общие вопросы C/C++ 2 14.05.2014 01:16
Удаление структур из массива структур Infini Помощь студентам 2 02.03.2013 22:31
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Поиск и вывод структур в файле Диман56 Общие вопросы C/C++ 31 15.04.2011 14:22
Сортировка массива структур. nec117 Общие вопросы C/C++ 5 22.02.2009 18:01