2 qq 33503893 qq_33503893 于 2016.04.14 21:24 提问

用C++编写文件存储和读取后显示不出

输入数据->文件存储->退出程序->重新运行->文件读取->数据统计->全部显示,之后发现之前存储的数据都没有了,求大神们帮忙看一下问题在哪
void save(const BOOK *top) //文件存储
{
const BOOK *q;
FILE *fp;

if(count==0)
{
    printf("\n当前没有记录可存!");
    return;
}

if((fp=fopen("D://bookmanage1.txt","wb"))==NULL)
{
    printf("\n不能打开文件!\n");
    exit(1);
}
printf("\n文件正在存储中……\n");
q=top->next;

while(q)
{
    printf("a");
    fwrite(q,LEN,1,fp);
    printf("b");
    q=q->next;
    printf("c");
}
fclose(fp);
printf("%d条记录已经存入文件,请继续操作。\n",count);

}

BOOK *load(BOOK *top) //文件读取
{
FILE *fp;
BOOK *q,*old;
count=0;

if((fp=fopen("D://bookmanage1.txt","rb"))==NULL)
{
    printf("打不开文件!");
    exit(1);
}
printf("\t正在读取文件中……\n");
ASK(q);
top=q;
old=top;

while(!feof(fp))
{
    if(1!=fread(q,LEN,1,fp)) break;
    count=count+1;
    ASK(q->next);
    //old=q->next;
    old=q;
    q=q->next;
}
old->next=NULL;
fclose(fp);

printf("\t取出%d条记录。\n",count);
return(top);

}

int estatistical(BOOK top) //统计数据
{
BOOK *p=top;
char choose[100],input[100];
int cn=0;
int flag=0;
printf("\t
***********************************************************\n");
printf("\t**\t\t请选择按照哪种方式进行统计\t \n");
printf("\t
[1] 书名 [2] 主编\t \n");
printf("\t
[3] 出版社 [4] 出版年\t \n");
printf("\t
[5] ISBN书号 [6] 全部显示\t \n");
printf("\t
**********************************************************\n");
gets(choose);
switch(cn)
{case 6:
display(p);
}
}

void display(const BOOK *top) //显示记录
{
const BOOK *q;
if(count==0)
{
printf("\n现在还没有记录!\n");
return;
}

    q=top->next;
    printf("书籍信息如下:\n");
    printf("书名  主编  出版社  出版年  版次  ISBN书号  定价  拥有本数  现余本数  借出本数\n");
    while(q!=NULL)
    {
        printf("%s\t%s\t%s\t%d\t%s\t%s\t%.2f\t%d\t%d\t%d\n",q->name,q->editor,q->press,q->pressyear,q->vision,q->ISBN,q->price,q->own,q->left,q->borrow);
        q=q->next;
    }
}

BOOK *badd(BOOK *top) //添加数据
{
BOOK *old;
BOOK *p,*q;
FILE *fp;
int flag;

ASK(p);
old=top;
while(old->next!=NULL)
{
    old=old->next;
}
printf("输入数据,输入‘0’时结束。\n");

--count;
do
{
    ++count;

    printf("\n书名:");
    scanf("%s",&p->name);
    if(strcmp(p->name,"0")==0)
        break;
    printf("\n主编:");
    scanf("%s",&p->editor);
    printf("\n出版社:");
    scanf("%s",&p->press);
    printf("\n出版年:");
    scanf("%d",&p->pressyear);
    printf("\n版次:");
    scanf("%s",&p->vision);
    printf("\nISBN书号:");
    scanf("%s",&p->ISBN);
    printf("\n定价:");
    scanf("%lf",&p->price);
    printf("\n现余本数:");
    scanf("%d",&p->left);
    printf("\n借出本数:");
    scanf("%d",&p->borrow);
    p->own=p->borrow+p->left;
    p->next=NULL;
    if(count==0)  top=p;
    old->next=p;
    old=p;
    ASK(p);
}while(p->name[0]!='0');
old->next=NULL;
free(p);

printf("输入成功!\n");
return(top);

}

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.14 22:25
 fopen("D:\\bookmanage1.txt","a"); //路径是双反斜杠,后面追加内容用a(append的意思)。
qq_33503893
qq_33503893 改了代码后发现读取时成功的, 可是数据统计->显示记录那里还是什么都显示不出来
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.20 22:00

读取文件后显示不出数据?
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
用C语言实现通讯录文件存储的版本
要实现文件存储,首先需要了解几个函数 fopen :FILE *fopen( const char *filename, const char *mode ); 作用:fopen函数打开指定的文件文件名。;参数filename字符串表示打开文件的文件名。参数mode字符串表示打开方式; 今天我们用到了两个打开方式: “r+”和“w” “r+”:打开对阅读和写作。该文件必须存在。(这里也可以用”
linux C语言读取bmp文件写屏
直接上代码11 int read_bmp(char* name, unsigned char* buff) 12 { 13 Image* image; 14 Rgbquad* quad; 15 Bitmapfileheader* fileheader; 16
C语言实现贪吃蛇(四)----游戏存档读档(文件操作)
前言:对于C语言的初学者来说,可能会觉得文件操作是一个比较陌生的领域,但实际上无论编写怎样的程序文件操作都是必需的。在操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统中的文件,因此所有的输入/输出都要通过读文件/写文件完成。启动一个C语言程序时,操作环境负责打开标准输入,标准输出,标准错误3个文件,并将这3个文件的指针提供给该程序。而我们熟知的 getchar 函数 putchar
C语言编写的学生成绩管理系统(数据结构课程设计)
用C语言编写,可以进行各种排序,以及排序后输出,一个配置文件存储信息,存储结构为结构体数组,排序算法是快速排序,程序五百行
网站不带WWW访问时矢量字体加载不出来 网站重定向
欢迎访问我的个人博客:原文链接 由于博客使用了一些矢量字体代替图标,但是习惯直接输入域名不带www访问博客时经常加载不出来,提示错误如下。 Access to Font at 'usr/themes/fonts/fontawesome-webfont.ttf?v=4.6.3' from origin '' has been blocked by CORS policy: No 'Access-
【C语言】编写一个程序显示当前时间。
#include #include #include int main() { struct tm *ptm; time_t ts; char tim[50]; ts = time(NULL); ptm = localtime(&ts); sprintf(tim,"(%d-%d-%d %02d:%02d:%02d):",ptm->tm_year+1900,ptm->tm_mon
c语言编写的员工信息管理系统
用c语言编写的员工信息管理系统,用文件存储,包含对职工信息的添加,删除,修改,排序,分类汇总等功能。
Linux下编写C程序( GCC )(hello,world)
在windows下写C程序是一件很容易的事,装好Turbo C就可以了,相信各位学过编程的都十分了解Turbo C吧。特别是现在大学里人人忙考级的情况下,二级C语言大概成了每个人默认考过的等级考试吧。可是在linux下又如何写C程序呢?其实,linux下写 C也是很容易的。IDE的话用 eclipse 集成 CDT 模块就行了。当然这属于重量级的了,就如同VC++之于windows一样。那有没
关于vs2010运行C程序时,运行结果窗口一闪而过的问题
用VC++6.0和VS中的C++编程,今天正常安装好后,编写一个正确的程序,可运行的时候,DOS窗口一晃而过,也算是正常编译了,但我不懂的是它为什么消失得这么快? 会出现dos界面是因为你程序中可能用到了需要用dos显示结果(或者输入之类的)的函数,比如printf()函数,马上消失是因为你执行程序是一步到位的,dos界面做完你需要它做的事情之后就被销毁了,如果你想看清楚整个过程,可以设置断点,
简单Demo让你分分钟理解Android中的文件存储
前言 首先,Android中的存储方式有很多种,各自的使用方式以及优点也是不同的,今天写一个简单的Demo来理解一下文件存储。 文件存储:Android中最基本的一种数据存储方式,这种存储方式不会对存储的内容做任何的格式化处理,所有的存储内容都会按原来的格式保存到文件中,因此它比较适合存储一些简单的文本数据或二进制数据。但是,如果你要保存的内容是一些较为复杂的文本数据,那你就需要一套自