C从文件读取到LinkedList

时间:2019-03-01 22:53:20

标签: c linked-list scanf stdin fgets

我有一个文本文件,需要阅读它才能填充链表。文件结构是这样的。

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事件插入模拟的eventList中。假设您正在使用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;

现在我正在努力的是如何使用此信息填充链表。 实际上,我为此付出了很多努力,所以对于这个问题过于复杂或过于简单感到抱歉。

我正在努力的第一件事 我将其声明为

  

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输入到eventList中。 我相信是这样的 它们分别是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);
} 

0 个答案:

没有答案