2016-09-06 4 views
-4

Eine Funktion liest eine Eingabedatei mit positiven ganzen Zahlen (eine Zahl pro Zeile) und erstellt eine Liste mit diesen Zahlen, eine pro Zelle. -1 in der Eingabedatei zeigt das Ende der Liste an. Auf diese Weise können Sie mehrere Listen in derselben Eingabedatei angeben. Angenommen, die Eingabedatei heißt "Eingabe". Bei jedem Aufruf einer Funktion werden die Zahlen in der Eingabedatei gelesen, bis -1 erreicht ist. Anschließend werden diese Zahlen in die Liste eingefügt und ein Zeiger auf den Kopf dieser Liste zurückgegeben. Wenn also die Eingabedatei 1 5 4 -1 4 8 6 -1 -1 7 8 enthält, gibt der erste Aufruf der Funktion einen Zeiger auf die Liste 1-> 5-> 4-> null zurück und der zweite Aufruf auf Eine Funktion gibt einen Zeiger auf die Liste 4-> 8-> 6-> null zurück. Der dritte Anruf wird Null zurückgeben und der vierte Anruf wird 7-> 8-> null zurückgeben. Ich wollte das erreichen, bisher kann ich die Datei aus der Textdatei lesen. Nun wollte ich für jede -1 angetroffene Fin-Datei die Nummer bis -1 nehmen und eine Liste erstellen.Erstellen einer Liste

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct list { 
    char *string; 
    struct list *next; 
}; 

typedef struct list LIST; 

int main() { 
    FILE *fp; 
    char line[128]; 
    LIST *current, *head; 

    head = current = NULL; 
    fp = fopen("test.txt", "r"); 

    while (fgets(line, sizeof(line), fp)) { 
     LIST *node = (struct list *)malloc(sizeof(LIST)); 
     node->string = _strdup(line);// strdup(line);//note : strdup is not standard function 
     node->next = NULL; 

     if (head == NULL) { 
      current = head = node; 
     } 
     else { 
      current = current->next = node; 
     } 
    } 
    fclose(fp); 
    //test print 
    for (current = head; current; current = current->next) { 
     printf("%s", current->string); 
    } 
    //need free for each node 
    return 0; 
} 
+2

Ich bin nicht eine Frage dort zu sehen. – EOF

+0

Gibt es hier irgendwo eine Frage? – saarrrr

+0

Wird jede Liste in einer Liste gespeichert? – BLUEPIXY

Antwort

0

wie folgt aus:

#include <stdio.h> 
#include <stdlib.h> 

struct list { 
    int v; 
    struct list *next; 
}; 

typedef struct list LIST; 

LIST *makeListFromFile(FILE *fp){ 
    int v; 
    LIST *current, *head = NULL; 

    while(fscanf(fp, "%d", &v) == 1 && v != -1){ 
     LIST *node = malloc(sizeof(LIST)); 
     node->v = v; 
     node->next = NULL; 
     if (head == NULL) 
      current = head = node; 
     else 
      current = current->next = node; 
    } 
    return head; 
} 

int main(void) { 
    FILE *fp = fopen("test.txt", "r"); 

    while(!feof(fp)){ 
     LIST *list = makeListFromFile(fp); 
     while(list){ 
      LIST *temp = list->next; 
      printf("%d ", list->v); 
      free(list); 
      list = temp; 
     } 
     puts("NULL"); 
    } 
    fclose(fp); 
    return 0; 
}