【问题标题】:output linked list to txt file输出链表到txt文件
【发布时间】:2014-06-04 10:29:14
【问题描述】:

您好,我正在尝试将链接列表导出到文本文件,但不知何故,文本文件总是达到非常大的大小(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);
}       
}

【问题讨论】:

    标签: c linked-list printf


    【解决方案1】:
    while(head) 
    {
        fprintf(MyFile, "%d\n",head->next);
    } 
    

    你的问题就在这里。您循环直到head 为NULL,但从未真正更改head 指针,因此您将永远循环写入相同的数据,直到磁盘空间用完。此外,您打印的是 next 指针的值,而不是实际存储在节点中的数据。

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

    fprintf(MyFile, "%d\n",head->data);
    

    其次,您实际上需要遍历列表,如下所示

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 2021-09-15
      • 2021-12-23
      • 1970-01-01
      相关资源
      最近更新 更多