<自己找不到bug>手工编辑一个文本文件,文件中每行为一个整数.读取文件内容构成链表.将链表按整数从小到大的顺序排序,按排序后的顺序将链表中的整数写
问题很奇怪, 主要问题是在这里p1->value=num;,可是不知道怎么回事//=====================================================================
//文件名:
//功能说明:【文件综合操作】手工编辑一个文本文件,文件中每行为一个整数.
//读取文件内容构成链表.将链表按整数从小到大的顺序排序,按排序后的顺序将
//链表中的整数写入另一个文件保存.
//作者:
//时间:13.12.20
//备注:
//=====================================================================
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(Node)
//=======创建结构体========
typedef struct Node
{
int value;
struct Node *next;
}Node;
//============================函数声明==================================
//===================================
//函数名:sort_list
//功能说明:对整数链表进行排序
//参数:TagNode *---头结点
//返回值:void
//===================================
void *sort_list(Node *head);
//========================================================
//函数名:free_node()
//功能说明:释放结点
//参数:Info*---头结点
//返回值:void
//=========================================================
void free_node(Node *head);
//===========================主函数测试=================================
int main()
{
FILE *fp1,*fp2;
int num;
Node *head,*p1,*p2;
//=====================打开文件==============================
fp1=fopen("in.txt","r");
if(fp1==NULL)
{
printf("文件无法打开!");
exit(0);
}
//=====================操作文件==============================
//创建链表
//分配头结点空间
head=p2=(Node*)malloc(LEN);
p1=(Node*)malloc(LEN);
p1=p2->next;
fscanf(fp1,"%d",&num);
while(!feof(fp1))
{
p1->value=num;
p1->next=NULL;
p2=p1;
p1=(Node*)malloc(LEN);
p1=p2->next;
fscanf(fp1,"%d",&num);
}
free(p1);
fclose(fp1);
//排序
sort_list(head);
//新建文件
fp2=fopen("out.txt","w");
if(fp2==NULL)
{
printf("文件无法打开!");
exit(0);
}
p2=head;
p1=p2->next;
num=p1->value;
while(p1!=NULL)
{
fprintf(fp2,"%d",num);
p2=p1;
p1=p2->next;
num=p1->value;
}
fclose(fp2);
//=========================关闭文件==================================
free_node(head);
return 0;
}
//============================函数定义==================================
//===================================
//函数名:sort_list
//功能说明:对整数链表进行排序
//参数:TagNode *---头结点
//返回值:void
//===================================
void *sort_list(Node *head)
{
Node *p1,*p2;
int temp;
p2=head->next;
//检查链表是否为空
if(p2==NULL)
{
puts("链表为空!");
return 0;
}
//选择排序法
while(p2->next!=NULL)
{
p1=p2->next;
while(p1!=NULL)
{
if(p2->value > p1->value)
{
temp=p2->value;
p2->value=p1->value;
p1->value=temp;
}
p1=p1->next;
}
p2=p2->next;
}
}
//========================================================
//函数名:free_node()
//功能说明:释放结点
//参数:Info*---头结点
//返回值:void
//=========================================================
void free_node(Node *head)
{
Node *p1,*p2;
p1=head;
while(p1!=NULL)
{
p2=p1;
p1=p1->next;
free(p2);
}
}