C читать из файла в LinkedList - PullRequest
0 голосов
/ 02 марта 2019

У меня есть текстовый файл, который мне нужно прочитать, чтобы заполнить связанный список.Структура файла выглядит следующим образом.

Ant,Adam   10 5
Mander,Sally 4 3
King,May  6 6
King,Joe 9 6
Graph,Otto 2 5
Carr,Redd 1 3

Имя szName.Второе int - это iDepartTmUnits, а последнее int - это iTime;

Я пытаюсь прочитать входные данные из stdin. Он должен вставить события EVT_ARRIVE и EVT_DEPART в список событий симуляции.Предполагая, что вы используете fgets и sscanf, пожалуйста, убедитесь, что вы проверили счетчик, возвращенный вашим sscanf.

// Event Constants
#define EVT_ARRIVE          1      // when a person arrives
#define EVT_DEPART          2      // when a person departs the simulation 

У нас есть эти структуры

typedef struct
{
char szName[16];       // Name
int iDepartTmUnits;    // time units representing how long he/she stays around
} Person;

// Event typedef (aka Element)
typedef struct
{
int iEventType;        // The type of event as an integer:
                       //    EVT_ARRIVE - arrival event
                       //    EVT_DEPART - departure event
int iTime;             // The time the event will occur 
Person person;         // The person invokved in the event.
} Event;

// NodeLL typedef - these are the nodes in the linked list
typedef struct NodeLL
{
Event event;
struct NodeLL *pNext;  // points to next node in the list
} NodeLL;

// typedefs for the ordered link list 
typedef struct
{
NodeLL *pHead;         // Points to the first node in the ordered list
} LinkedListImp;

typedef LinkedListImp *LinkedList;

// typedefs for the Simulation
typedef struct
{
int iClock;            // clock time
LinkedList eventList;  // A linked list of timed events
} SimulationImp;
typedef SimulationImp *Simulation;

Теперь, где я борюсь, это какзаполнить связанный список с этой информацией.На самом деле я изо всех сил пытаюсь понять это, поэтому мне жаль, что вопрос слишком сложный или слишком простой.

Первое, с чем я борюсь I 'я объявил это как

void generateArival (Event eventM [])

Я считаю, что это неправильно, потому что в моем основном случае я бы не пропустил это событие,Я полагаю, что передам это моделирующую реализацию.

Второе, с чем я борюсь Вот код, который у меня есть, где я слишком скопирован из файла в связанный список.

while(!feof(pFilePerson))
{
    iLineCount++;
    i++;

    fgets(szInputBuffer, MAX_LINE_SIZE, pFilePerson);
    iScanfCnt = sscanf(szInputBuffer,"%s %d %d\n",
                      event.person.szName,
                      event.iTime,
                      event.person.iDepartTmUnits,
                      );
}

Наконец

Я должен ввести EVT_ARRIVE и EVT_DEPART в список событий.Я считаю, что чтобы быть примерно таким, они с уважением относятся к int 1 и 2, поэтому мне нужно что-то вроде iEvent = event.iEventType; и ввести это в sim->eventList

Любая помощь приветствуется, мне нужно намного большевремя с этой концепцией связанных списков, но это ломает мне голову.

РЕДАКТИРОВАТЬ

Я могу распечатать имя, но не цифры

    while(fgets(szInputBuffer, sizeof szInputBuffer, pFilePerson) != NULL)
{

    // print the input buffer as is (it also has a linefeed)
    //printf("Person # %d: %s\n", iLineCount, szInputBuffer);
        sscanf(szInputBuffer,"%s",
                    event.person.szName);
        sscanf(szInputBuffer, "%I64d", 
                    &event.person.iDepartTmUnits);

                     //linkList.event.iTime);

    printf("%-7s\n", event.person.szName);
    printf("%d\n", event.person.iDepartTmUnits);
} 
...