У меня есть задача сделать что-то похожее на программу бронирования гостиницы в C. В принципе, у меня должно быть 2 структуры, одна для бронирования номеров в отеле (которая содержит информацию об этой комнате, такой как ее идентификатор, пол, сколько кроватей и тому подобное, указатель на человека, который зарезервировал номер, и список людей, которые будут в этой комнате), а другая структура для лиц (в которых содержится, скажем, имя и фамилия человека).Ввод связанного списка внутри структуры в C (ошибка сегментации)
Проблема, с которой я столкнулась, - это ошибка сегментации, которую я получаю с тех пор, как я, вероятно, не сделал эти структуры правильными.
Вот часть моего кода, который должен добавить гостя в списке (который находится в структуре резервирования):
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <time.h>
#define MAXSTR 25
#define FORMAT_LEN 15
typedef struct person //structure that holds info about person
{
char name[MAXSTR + 1];
char surname[MAXSTR + 1];
}Guest;
typedef struct persons // list of persons
{
Guest person;
struct persons* next;
} Persons;
typedef struct //Pointer to first person in list
{
Persons* list;
} List;
typedef struct room //structure that holds info about rooms that are reserved
{
unsigned int ID;
unsigned int floor;
unsigned int bedcount;
struct tm dateArrival;
struct tm dateDep;
bool cancelled;
unsigned int price;
Guest* person;
List* list;
}Reservation;
typedef struct rooms
{
Reservation room;
struct rooms* next;
} Reservations;
bool PutGuestInsideList(List* list);
char* EnterString(char* str);
int main()
{
Reservations* room = NULL;
List list = { NULL };
printf("New guest: \n");
if(PutGuestInsideList(room->room.list) == false)
printf("Try again. \n");
}
bool PutGuestInsideList(List* list)
{
if(list == NULL)
return false;
Persons* newpers = (Persons*) malloc(sizeof(Persons));
if(newpers == NULL)
return false;
printf("Name: ");
EnterString(newpers->person.name);
printf("Surname: ");
EnterString(newpers->person.surname);
list->list = newpers;
return true;
}
char* EnterString(char* str)
{
if (str == NULL)
return str;
char format[FORMAT_LEN] = "";
sprintf(format, "%%%u[^\n]", MAXSTR);
scanf(format, str);
scanf("%*[^\n]");
scanf("%*c");
return str;
}
Если есть что-то я оставил в своем объяснении спросить меня в комментариях. Благодаря!
Используйте отладчик, чтобы узнать, где он не работает. – PcAF
Ошибки сегментации вызваны чтением чего-то, на которое указывает указатель ... когда этот указатель неправильно установлен. –