【c程】无课表小程序中链表修改
自己编的无课表小程序,但是现在还没有成型,对链表从文件中读取数据搞不懂,下面的代码不知道怎么错了,求改正!!!#include <stdio.h>
#include <stdlib.h> //用于调用 exit()函数
#include <string.h> //用于调用 stricmp()函数
#include <conio.h> //用于调用 getch()函数
#define DAYS 6
#define LESSONS 5
#define M 300
typedef struct tt //建立一个节点结构体//
{
char date; //每一节课的情况//
struct tt*next; //节点的指针部分 //
}add_tt;
struct pt
{
char date; //每一节课的情况//
};
FILE *fp;
add_tt *tail,*head; //定义全局变量即链表的表尾节指针和头指针//
//在文件中读取数据生成课程表单链表,如果不存在就提示错误//
char load(char infile[200])
{
add_tt *new;
struct pt t;
head=(add_tt *)malloc(sizeof(add_tt));
tail=head=NULL;
loop: //设置钩子loop,形成主循环体
printf("输入你想要处理的课程表的地址:\n");
printf("(例如: C:\\\\abc\\\\123.txt)\n"); //提示输入格式
printf("文件地址:");
gets(infile);
//退出判断原件
if (stricmp(infile, "exit") == 0) //判定输入字符串是否为‘exit’,
{
esc1:printf("\t\tThank you for using our program.\n\t\t\tBye bye!\n");//设置钩子esc1
exit(0); //判定成立则退出程序。
}
//文件地址校准原件
if((fp=fopen(infile,"r"))==NULL) //判定文件地址合法性,合法则以只读方式读入文件
{
printf("Can not open '%s'\n",infile);
printf("Please check your input.\n");
goto loop; //文件地址输入有误,则返回钩子loop提示重新输入
}
if(!feof(fp)) /*循环读数据直到文件尾结束*/
if(fread(&t,sizeof(struct pt),1,fp)==1) //如果读到数据,执行循环体//
{
new=(add_tt *)malloc(sizeof(add_tt)); //连入第一个节点//
strcpy(new->date,t.date);
head=tail=new; /*保存当前结点的指针,作为下一结点的前驱*/
new->next=NULL;
}
//连入其他节点//
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
!f(fread(&t,sizeof(struct pt),1,fp)==1)
{
new=(add_tt *)malloc(sizeof(add_tt)); //申请空间连入第一个节点//
strcpy(new->date,t.date);
tail->next=new;
new->next=NULL;
tail=new;
}
}
fclose(fp);
return head;
}
//建立函数打印链表内容//
void print(struct tt *head)
{
struct tt *p;
p=head;
if(p==NULL)
{
printf("no dates\n");
getche();
}
else
while(p!=NULL)
{
printf("%3c",p->date);
p=p->next;
}
}
main()
{
int m=1,z;
char infile[200];
//欢迎界面
printf("\t\t欢迎来到无课表小程序\n");
printf("\t\t\t\t(输入 'exit' 离开程序)\n\n");
printf("输入你想要处理的课程表的地址:\n");
printf("(例如: C:\\\\abc\\\\123.txt)\n"); //提示输入格式
printf("文件地址:");
head=load(infile);
print(head);
}