问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

结构数组存储问题

发布网友 发布时间: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

所有的
typedef struct stu
{
int num;
struct *next;
}STU;
都改成
typedef struct stu
{
int num;
struct stu *next;
}STU;
在我的编译环境里运行之后并没有楼主那样的错误呀,请问楼主是什么开发环境呀?

热心网友 时间:2023-08-26 15:24

太长。。。懒得看。

估计是楼主的指针有的地方程序写错了,
只是编译器没有发现而已,
C的编译器大家都知道差错能力很有限的,

看看是不是有地方溢出了或编码有问题。

热心网友 时间:2023-08-26 15:25

char name[10];这句
改成char name[100];试试吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
推荐一款在卧室听的音响,最好带CD,带收音机,可插U盘,价格1000以内!尽量... 求问,近几年还会有类似于声之形、你的名字这样的动漫电影么w_百度... 苦学包括什么 北京世纪百奥科技有限公司怎么样? 居住证积分需要哪些材料 上海办居住证积分需要什么资料 居住证积分有哪些材料 如何建立良好的家庭情感氛围 如何让家庭氛围更快乐 如何营造一个欢乐轻松的家庭氛围呢? 签就业协议书时间??? Thinkpad sl400蓝屏提示:stop:ox00000024(ox00190444,ox8A0AD860,OXC0000102,OX00000000)进不了系统,急 高手来分析下这个windows蓝屏代码 关于应届毕业生签就业协议的问题 系统故障,停止错误,Ox0000000a(0xad860c30,0xd0000002,0x00000001,0x80888b50) 电脑蓝屏出现代码0X0000007A(0X00000003,0XC05BFBC0,0XC000000E,OXB7F1850C,OX277AD860) 是什么毛病 ASM AD860M,感应器失灵怎么修呢?? 学校住宿日记150字以上 实习生与应聘公司签订了《就业意向书》,内容规定不签劳动合同违约罚5000元,我不签会被罚5000吗? 描写校园场景的作文150字三百字 关于学校的事作文150字 请有经验的人士回答训练狗狗定点上厕所的问题 2022年四川公务员考试怎么才能知道申论考哪一类卷子 怎么样训练三个月狗狗上厕所,睡觉? 狗狗小便前为什么要先闻闻? 校园日记150个字怎么写 狗狗想要上厕所有哪些表现? 都在说更年期,更年期究竟是多大岁数呢 国画老师简介怎么写 中医学5+3一体化怎么样? 黑金刚的种植方法 实习协议和offer有什么区别?为什么我通过校园招聘考进公司却签的是没有任何就业意向的实习协议? 这是月季还是玫瑰 泪求Windows优化大师7.66注册码 毕业生就业协议与劳动合同的区别和联系 怎么判断蓝玫瑰的真假,各位哥哥姐姐帮帮忙啦,送心上人的,送错了坏我一生啊 求仙剑五所有宣传片MD5值! 救救我家的花 O(∩_∩)O谢谢 捶击的意思 金和段组成的是什么字?怎么读? 锻的拼音字母音迅怎么写 SMC PF2W720-04-27 流量计怎么设置参数 一哈要去配眼镜了,弱弱问句,配眼镜价钱是怎么算的 SMC气体流量计上下线模式怎么设置 虹润5600流量表参数怎么设置? 流量表小数点后面数字怎么调 用友——流量怎么设置的 SMC气动三联件型号上为什么没有流量说明 两个同意系列SMC的空气流量计的度数不同 sonometer30流量表修改时间