Ввести структуру "историческое событие" с полями "число", "месяц", "год", "событие" - C (СИ)
Формулировка задачи:
Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ. Составить и протестировать функции
a. ввода исторического события (ввода нескольких событий в массив структур);
b. вывода на экран списка исторических событий;
c. вычисляющую интервал в днях, прошедший между двумя заданными историческими событиями (не учитывая високосные года, полагая год по 365 дней
Возникли проблемы с каждым из пунктов
a. пропускает пункт ввода событий
b. некорректный вывод даты
c. не учитывает введенные события вообще
Прошу помочь.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<locale>
#define MAX 5
struct date
{
int year[40];
int month[12];
int day[30];
char sob[40];
}date_list[MAX];
void init_list(void)//инициализация структуры
{
register int t;
for(t=0; t<MAX; ++t)
{
date_list[t].year[0] = '\0';
date_list[t].month[0] = '\0';
date_list[t].day[0] = '\0';
date_list[t].sob[0] = '\0';
}
}
int find_free()
{
int t;
for(t=0;(date_list[t].year[0])&&(t<MAX);t++)
if (t==MAX) return -1;
return t;
}
void enter(void)
{
int slot,n=0;
slot=find_free();
if(slot==-1)
{
printf("Список заполнен");
return;
}
printf("Год:");
scanf("%d",&date_list[slot].year);
printf("Месяц:");
scanf("%d",&date_list[slot].month);
printf("День:");
scanf("%d",&date_list[slot].day);
printf("Событие:");
gets(date_list[slot].sob);
n=n+1;
}
void list()
{
int t;
for(t=0;t<MAX;t++)
if (date_list[t].year[0])
{
printf("%d\n",date_list[t].year);
printf("%d\n",date_list[t].month);
printf("%d\n",date_list[t].day);
printf("%s\n",date_list[t].sob);
printf("\n\n");
}}
void interval()
{
const int N=5;
date mas[N];
int n=0;
printf("\nвведено %d событий\n",n);
for (int i=0; i<n; i++)
{
printf("\n",mas[i].year);
printf(" - ",mas[i].sob);
}
getch;
}
int main_menu(void)
{
char nom[80];
int c;
setlocale(LC_ALL, "Russian");
printf("--------------------------------------------");
printf("\nЗдравствуйте!\n");
printf("Выберите функцию из меню:\n");
printf("--------------------------------------------");
printf("\n 1 - Ввод исторического события\n");
printf(" 2 - Вывод исторического события\n");
printf(" 3 - Интервал между датами\n");
printf(" 4 - Выход из программы\n");
printf("--------------------------------------------");
do
{
printf("\nПожалуйста, введите номер нужного пункта: ");
gets(nom);
c = atoi(nom);
}
while(c<0 || c>4);
return c;
}
int main(void)
{
date d;
setlocale(LC_ALL,"Russian");
char choice;
for(;;)
{
choice = main_menu();
switch(choice)
{
case 1: enter();getch;
break;
case 2: list();getch;
break;
case 3: interval();break;
case 4: printf("_____________________________________________________________");
printf("\nДо свидания!\n");
system("pause");
exit(0);
}
}
return 0;
}Решение задачи: «Ввести структуру "историческое событие" с полями "число", "месяц", "год", "событие"»
textual
Листинг программы
struct date
{
int year[40];
int month[12];
int day[30];