C 将链表输出到txt文件

C 将链表输出到txt文件,c,linked-list,printf,C,Linked List,Printf,您好,我正在尝试将链接列表导出到文本文件,但不知何故,文本文件一直达到非常大的大小(5gb)且未打开 如果你能知道问题出在哪里,并给我一个修复她的方法,我会很高兴的。谢谢 我的代码- #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; } node; node* insert(node* head, int num); void free_l

您好,我正在尝试将链接列表导出到文本文件,但不知何故,文本文件一直达到非常大的大小(5gb)且未打开

如果你能知道问题出在哪里,并给我一个修复她的方法,我会很高兴的。谢谢

我的代码-

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

typedef struct node
{
int data;
struct node *next;
} node;

node* insert(node* head, int num);
void free_list(node *head);
void fprintfList(node *head); 

int main()
{


int num;
int temp;
node *head, *p;
head = NULL;
FILE * MyFile;

do 
{
    printf("Enter numbers\n");
    scanf("%d",&num);
    if(num) 
    {
        head = insert(head, num);
    }
} while(num);
p = head;

MyFile = fopen("New_File.txt","w");

while(head) 
{
    fprintf(MyFile, "%d\n",head->next);
} 



//fprintfList(head); 
free_list(head);
fclose(MyFile);
return 0;
}




node* insert(node* head, int num) 
{
node *temp, *prev, *next;
temp = (node*)malloc(sizeof(node));
temp->data = num;
temp->next = NULL;
if(!head){
    head=temp;
} else{
    prev = NULL;
    next = head;
    while(next && next->data<=num){
        prev = next;
        next = next->next;
    }
    if(!next){
        prev->next = temp;
    } else{
        if(prev) {
            temp->next = prev->next;
            prev-> next = temp;
        } else {
            temp->next = head;
            head = temp;
        }            
    }   
}
return head;
}


void free_list(node *head) 
{
node *prev = head;
node *cur = head;
while(cur) 
{
    prev = cur;
    cur = prev->next;
    free(prev);
}       
}
#包括
#包括
类型定义结构节点
{
int数据;
结构节点*下一步;
}节点;
节点*插入(节点*头,整数);
无效自由列表(节点*头);
无效fprintfList(节点*头部);
int main()
{
int-num;
内部温度;
节点*head,*p;
head=NULL;
文件*MyFile;
做
{
printf(“输入数字”);
scanf(“%d”和&num);
if(num)
{
头部=插入(头部,数量);
}
}while(num);
p=水头;
MyFile=fopen(“New_File.txt”,“w”);
while(head)
{
fprintf(我的文件,“%d\n”,头->下一步);
} 
//fprintfList(head);
免费名单(标题);
fclose(MyFile);
返回0;
}
节点*插入(节点*头,整数)
{
节点*temp、*prev、*next;
temp=(node*)malloc(sizeof(node));
温度->数据=num;
temp->next=NULL;
如果(!头){
压头=温度;
}否则{
prev=NULL;
下一个=头部;
while(next&&next->datanext;
}
如果(!下一个){
上一个->下一个=温度;
}否则{
如果(上一个){
临时->下一步=上一步->下一步;
上一个->下一个=温度;
}否则{
温度->下一步=头部;
压头=温度;
}            
}   
}
回流头;
}
无效自由列表(节点*头)
{
节点*prev=头部;
节点*cur=头部;
while(cur)
{
prev=cur;
cur=prev->next;
免费(上);
}       
}
你的问题就在这里。你循环直到
head
为空,但从来没有实际更改
head
指针,因此你将永远循环写入相同的数据,直到磁盘空间用完。此外,你打印的是
下一个
指针的值,而不是节点中存储的数据

您首先需要打印实际数据,因此将
fprintf
更改为:

fprintf(MyFile, "%d\n",head->data);
其次,您实际上需要遍历列表,如下所示

while(head) 
{
    fprintf(MyFile, "%d\n",head->data);
    head = head->next;
} 
while(head) 
{
    fprintf(MyFile, "%d\n",head->data);
    head = head->next;
}