| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 723 人关注过本帖
标题:初学者编译链表系统程序求改正
只看楼主 加入收藏
王等等
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-9-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
初学者编译链表系统程序求改正
主要是想编译基于链表的系统,现在实现了链表建立,链表存储,读取输出不能执行,求大神指点一下


程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct tamers 
{
char tname[20];
int tno;
char tsex[2];
char tmuseum[10];
int tage;
char tshowtime[20];
char tshowname[20];
int ano;
struct tamers *next;
}TMR;
int save();
void output();
TMR*shuru();
TMR * read_from_file(); 
int main()
{


shuru();
save();
output();
return 0;
}
TMR*shuru()
{
TMR*head,*p,*q;
char tname[20]; 
p = (TMR *)malloc(sizeof(TMR));
head = p;
q = p;
q ->next = NULL;
printf("请输入驯养员信息 输入名字为'none'时结束:\n");
printf("名字:");
scanf("%s",&tname);
while(strcmp(tname,"none")!=0)
{
p = (TMR*)malloc(sizeof(TMR));
strcpy(p->tname,tname);
printf("编号:");
scanf("%s",&p->tno);
printf("性别:");
scanf("%s",&p->tsex);
printf("年龄:");
scanf("%d",&p->tage);
printf("场馆:");
scanf("%s",&p->tmuseum);
printf("表演时间:");
scanf("%s",&p->tshowtime);
printf("节目名称:");
scanf("%s",&p->tshowname);
printf("宠物编号:");
scanf("%d",&p->ano);
q->next=p;
q=q->next;
printf("请输入驯养员信息 输入名字为'none'时结束:\n");
printf("名字:");
scanf("%s",&tname);

}
q->next=NULL;
return head;
}
//存储 
int save (TMR*head)
{
TMR * p;
FILE * fp;
int flag;
p=head->next;
fp= fopen("tamers.txt","w");
if(NULL==fp)
{
printf("文件打开失败"); 
return 0; 
}
while(NULL!=p)
{
flag=fwrite(p,sizeof(TMR),1,fp);
if(flag!=1)
{
printf("write failed");
return 0;
}
p=p->next;
}
fclose(fp);
free(fp);
return 1;
}

//读取 
/*TMR *read()
{
FILE*fp;
TMR *p;
head=(TMR*)malloc(sizeof(TMR));
head->next=NULL;
fp=fopen("tamers.txt","r");

while(!eof(fp))
{
p=(TMR*)malloc(sizeof(TMR));
fread(p,sizeof(TMR),1,fp);
p->next=head->next;
head=p;
}
fclose(fp);
free(fp);
return head;
}*/
TMR * read_from_file()
{
FILE * fp;
TMR*head,*p;
head=(TMR*)malloc(sizeof(TMR));
head->next=NULL;
fp=fopen("tamers.txt","r");

while(!eof(fp))
{
p=(TMR*)malloc(sizeof(TMR));
fread(p,sizeof(TMR),1,fp);

p->next=head->next;
head=p;
}
fclose(fp);
free(fp);
return head;
}



void output(TMR*head)
{
head=read_from_file();
TMR * p;
p=head->next;
while(p!=NULL)
{
printf("姓名:%s;\t编号:%d;\t性别:%s;\t年龄:%d;\t场馆:%s;\t表演时间:%s;\t节目名称:%s;\t宠物编号:%d;\n", 
p->tname,p->tno,p->tsex,p->tage,p->tmuseum,p->tshowtime,p->tshowname,p->ano);
p=p->next;
} }
2016-09-02 12:46
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
读取文件那段我改了,你看看
TMR * read_from_file()
 {
 FILE * fp;
 TMR*head=NULL,*p,*p1;
 fp=fopen("tamers.txt","r");

while(!eof(fp))
 {
 p=(TMR*)malloc(sizeof(TMR));
 fread(p,sizeof(TMR),1,fp);
if(head==NULL)
 {
     head=p;
     p1=p;
     head->next=NULL:
 }
else
{
    p1->next=p;
    p1=p;
    p1->next=NULL;
}
}
 fclose(fp);
return head;
 }
2016-09-02 13:09
王等等
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-9-2
收藏
得分:0 
回复 2楼 ehszt
我感觉在主函数和声明函数那里好像有问题,我按你的运行了一边,和我的运行出现问题一样,没有读取输出
2016-09-02 13:22
王等等
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-9-2
收藏
得分:0 
回复 2楼 ehszt
我的运行以后输入正常,存入文件的代码是正确的,因为我单独运行时可以存入,打印出结果单独运行也是正确的,只有读取无法单独检测,也只有加上读取就不能运行了,而且加上读取以后去目录下找txt文件时,里边是没有内容的,不知到是因为被读取出去了么?
2016-09-02 13:25
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
只读模式,怎么会影响文件?是文件输出的时候被改写了吧!
2016-09-02 15:30
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:10 
随便看了几行,发现存在的问题,先将这些修改后再说:
TMR*shuru();               // 子函数的返回类型是TMR指针,但是主函数并没有看到有接收的变量
int save (TMR*head)     //这个TMR *head是个局部变量,那么这个head的值就不好说了,同时这个返回值是int类型,还是用一个变量来接收,确定是否存储成功
void output(TMR*head)  //同上,只是这个函数没有返回值。
int save();void output();和后面的子函数不一样,这两个没参数,后面的两个子函数有参数。
你先将这几个问题处理好了,然后将代码改好测试不行到时再问。

[此贴子已经被作者于2016-9-2 16:59编辑过]

2016-09-02 16:58
快速回复:初学者编译链表系统程序求改正
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017798 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved