[英]How can I create a (C) function to read data from a file into a linked-list using 'read'?
[英]How to create a linked list use data read from file in C
我是 C 新手,我想讀取一個包含一個整數的數據文件,並將它們添加到一個鏈表中(我在這里很懶,所以沒有將 typedef 放入 .h 文件中,而是將其放入它在我的 .c 文件的頂部)。 鏈表的結構如下:
typedef struct Node{
int num;
struct Node *next;
}Node;
現在我寫了一些像下面這樣的代碼,.c 文件編譯但不能正確顯示鏈表。 我不知道為什么會發生這種情況,但我猜這與 while 循環條件和 fscanf() 有關?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node{
int num;
struct Node *next;
}Node;
Node* createLinkedlist(FILE* input_file, char* filename1);
void displayList(Node *head);
int main() {
char *filename1 = "data";
int number;
FILE *input_file;
Node *head = NULL;
head = createLinkedlist(input_file, filename1);
displayList(head);
return(0);
}
Node* createLinkedlist(FILE* input_file, char* filename1) {
Node* head = NULL;
Node* newNodePtr = NULL;
Node* p = NULL;
input_file = fopen(filename1, "r"); /*open input file, read data*/
if(input_file == NULL) {
printf("Cannot open %s", filename1);
exit(EXIT_FAILURE);
}
while(fscanf(input_file, "r") != EOF) {
/*Create individual Node*/
newNodePtr = (Node*)malloc(sizeof(Node));
if(newNodePtr == NULL){
printf("The storage was NOT allocated.");
exit(EXIT_FAILURE);
} else {
/*Create signle Node data*/
fscanf(input_file, "%d\n", &(newNodePtr->num));
}
if(head == NULL){
head = newNodePtr;
}else {
p = head;
while(p->next != NULL) {
p = p->next;
}
p->next = newNodePtr;
}
}
return head;
}
void displayList(Node* head) {
Node *p = head;
while(p != NULL){
printf("\t%d->", p->num);
p = p->next;
}
}
有人可以幫我找出我的問題嗎? 非常感謝,我真的很掙扎...
主要問題是,您沒有將 NULL 值分配給正確的值。 拿到入口后,你必須寫:
newNodePtr->next = NULL;
如果你不這樣做,這將不起作用:
else {
p = head;
while(p->next != NULL) {
p = p->next;
}
p->next = newNodePtr;
}
因為如果您不分配 NULL,您將無法找到 NULL 值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.