函数读取包含正整数的输入文件(每行一个数字)并创建包含这些数字的列表,每个单元格一个。输入文件中的-1表示列表的结尾。这样,您可以在同一输入文件中指定多个列表。假设输入文件称为“输入”。每次调用函数都会读取输入文件中的数字,直到达到-1,然后将这些数字放入列表中,并返回指向此列表头部的指针。因此,如果输入文件包含 1 5 4 -1 4 8 6 -1 -1 7 8 然后,第一次调用函数将返回指向列表1-> 5-> 4-> null的指针,第二次调用函数将返回指向列表4-> 8-> 6->的指针;空值。 第三个呼叫将返回null,第四个呼叫将返回7-> 8->空值。我想实现这一点,到目前为止,我能够从文本文件中读取文件。现在我想要每个-1遇到的fin文件,它应该取数字直到-1并创建一个列表。
#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;
}
答案 0 :(得分:0)
#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;
}