私はCのホテル予約プログラムのようなものを作る作業があります。 基本的に私は2つの構造が必要です。その部屋のID、フロア、ベッドの数、そのようなもの、部屋を予約した人へのポインタとリストその部屋にいる人のリスト)と人のための他の構造人の名前と姓など)。リンクされたリストを構造内に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
セグメンテーションフォルトは、ポインタが指し示すものを読み込むことによって引き起こされます。ポインタが正しく設定されていない場合です。 –