0

I am trying to read a line from txt file and insert to struct doubly linked list.

I used buffer[] to read a line from file, but the buffer read more than a line.

Here's the struct

    #define MAX_NAME 10
    #define MAX_NUM 20
    #define MAX_EMAIL 50

    typedef struct Member { 
    struct Member *next;
    struct Member *prev;

    char m_name[MAX_NAME]; 
    char m_num[MAX_NUM];
    char m_email[MAX_EMAIL];
}MB;

typedef struct LinkedList {
    MB *head;
    MB *tail;
    int cnt; //count
}list;

And here's the code(file to list)

void fileToList(list *list) {
    char buffer[85] = {0, }; 
    char *ptr = strtok(buffer, "|"); 

    FILE *fp = fopen("member.txt", "rt");
    while (!feof(fp))
    {
        MB *Node = CreateNode();
        fgets(buffer, sizeof(buffer), fp);

        ptr = strtok(buffer, "|");
        strcpy_s(Node->m_name, sizeof(Node->m_name),ptr);
        ptr = strtok(NULL, "|");
        strcpy_s(Node->m_num, sizeof(Node->m_num), ptr);
        ptr = strtok(NULL, "\r");   
        strcpy_s(Node->m_email, sizeof(Node->m_email), ptr);

        if (isEmpty(list) == 1) {
            Node->prev = list->head;
            list->head->next = Node;
            Node->next = list->tail;                
            list->tail->prev = Node;
            list->cnt += 1; 
        }
        else {
            Node->prev = list->tail->prev;
            list->tail->prev->next = Node;
            list->tail->prev = Node;
            Node->next = list->tail;
            list->cnt += 1;
        }
    }

    fclose(fp);
}

And here's the txt file...

John|12345678|asdf@gmail.com
Steve|23456789|qwer@gmail.com
June|98765432|qwop@gmail.com

What should I do?

Marco Bonelli
  • 63,369
  • 21
  • 118
  • 128
  • I assume that each line in file _member.txt_ may have a different length. You are filling your entire buffer which may contain more than one line. You need to write code that reads exactly one line. Maybe [C read file line by line](https://stackoverflow.com/questions/3501338/c-read-file-line-by-line?answertab=votes#tab-top) will help. – Abra Oct 26 '19 at 15:58
  • https://stackoverflow.com/q/5431941/905902 – wildplasser Oct 26 '19 at 16:28

0 Answers0