发布网友 发布时间:2022-05-12 04:20
共4个回答
热心网友 时间:2023-08-26 15:23
//你的代码错误多,你看我的在改吧,对了看一下我下面给你的网址上的东西,对你编译多个文件有用(你的文件中多次定义 STU)
//大哥,我以帮你改完 //经本人测试,一定是正确 有 一部分 有注释
//你 …………这样去做
//先创建一个文件 auxiliary.h 将以下代码放入其中
//在创建一个文件 main.cpp 将外一部分放入此文件,在编译main.cpp就可
//先是auxiliary.h 文件
#ifndef _AXUILIARY_H
#define _AXUILIARY_H // http://hi.baidu.com/goumuli/blog/item/ad860a8288f769b66d811975.html 上有解释
//在vc中链接时就出现了i重复定义的错误,而在c中成功编译。
#include "stdio.h"
#include "stdlib.h"
typedef struct stu
{
int num;
struct stu *next;
}STU;
STU *SCANF()
{
STU *h,*fp,*fp1;
int c;
printf("输入数据 ( 0 结束) :\n");//输入提示
scanf("%d",&c);//输入数据
h=(STU *)malloc(sizeof(STU));//创立头结点好你还扫
if(h==NULL)
exit(0);
h->next=NULL; // #####本人改过
fp=h;
while(c>0)//判断是否结束输入
{
fp1=(STU *)malloc(sizeof(STU));//创立新节点
if(fp1==NULL)
exit(0);
fp1->num=c;//将数据放入节点
fp1->next=NULL;// #####本人改过
fp->next=fp1;//节点相连
fp=fp1;//移动到当前节点
scanf("%d",&c);//输入数据
}
//fp->next='\0';//节点结束
return h;//返回
}
/*输入到文件函数PUT()代码
#include"stdio.h"
#include "stdlib.h"
typedef struct stu
{
int num;
struct *next;
}STU; */
void PUT(struct stu *head)
{ STU *p;
FILE *fp;
char name[100];
p=head->next;
if(p->next==NULL)
{
printf("输入数据为空!");
exit(0);
}
printf("输入文件名:");
fflush(stdin); //这个一定要加
gets(name); //文件名要合法
fp=fopen(name,"wb");//用二进制文件不
if(fp==NULL)
{
printf("打开文件失败!");
exit(0);
}
do
{
fwrite(p,sizeof(STU),1,fp);
p=p->next;
}while(p !=NULL); //注意小心我在这错了改了好长时间
fclose(fp);
}
struct stu *GET()
{
FILE *fp;
char name[100];
STU *h,*p,*p1;
printf("输入读取文件名:");//输入文件名
fflush(stdin);
gets(name);
// printf("\n");
fp=fopen(name,"rb");//打开文件
if(fp==NULL) //判断是否正常打开
{
printf("打开文件失败!");
return NULL;
}
h=(STU*)malloc(sizeof(STU));//创立头节点
h->next=NULL;
p=h;//节点链接
p1=(STU*)malloc(sizeof(STU));//创立新节点
fread(p1,sizeof(STU),1,fp);//从文件读入数据
while(p1->next!=NULL)//判断是否结束
{
p->next=p1;//节点相连
p=p1;//移到链表尾
p1=(STU*)malloc(sizeof(STU));//创立新节点
p1->next=NULL;
fread(p1,sizeof(STU),1,fp);//从文件读入数据
}
p->next=p1;
fclose(fp);
return h;//将头结点返回mian函数
}
#endif
//################################################################
//以下放入main.cpp 中请注意
#include "stdio.h"
#include "conio.h"
#include <stdlib.h>
#include "auxiliary.h"
/*typedef struct stu
{
int num;
struct stu *next; //此处改了
}STU;
extern struct stu *SCANF();//输入数据
extern void PUT(struct stu *);//输入到文件
extern struct stu * GET();//从文件读取
*/
int main(void)
{
struct stu *h=NULL;//头结
struct stu *h_read=NULL;
char mistake='0';//判断操作选项是否正确
int again=0;//判断是否继续操作
err: if(mistake=='1')
{
printf("无效输入!\n");
system("cls");
mistake=0;
}
printf("选择操作项:\n");//输入提示
printf("1.输入\n");
printf("2.存盘\n");
printf("3.读取\n");
printf("4.退出\n");
switch(getch())//选择操作
{
case '1':
h=SCANF();break;
case '2':
PUT(h);break;
case '3':
h_read=GET();break;
case '4':
{
printf("再见!");//结束
getchar();
return 0;
}
default :
mistake='1'; goto err;//错误返回
}
system("cls");
printf("是否继续操作:\n");//是否继续操作
printf("1.继续\n");
printf("2.退出\n");
scanf("%d",&again);
if(again==1)
goto err;//继续操作返回开头
printf("再见!");//结
getchar();
return 0;
}
热心网友 时间:2023-08-26 15:24
所有的热心网友 时间:2023-08-26 15:24
太长。。。懒得看。热心网友 时间:2023-08-26 15:25
char name[10];这句