种子为什么没有资源呢C语言呢为什么

2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2017年9月 VC/MFC大版内专家分月排行榜第二2017年8月 VC/MFC大版内专家分月排行榜第二2017年4月 VC/MFC大版内专家分月排行榜第二2017年3月 VC/MFC大版内专家分月排行榜第二2017年2月 VC/MFC大版内专家分月排行榜第二2016年8月 VC/MFC大版内专家分月排行榜第二2016年7月 VC/MFC大版内专家分月排行榜第二2016年6月 VC/MFC大版内专家分月排行榜第二2015年6月 VC/MFC大版内专家分月排行榜第二
2017年10月 VC/MFC大版内专家分月排行榜第三2017年6月 VC/MFC大版内专家分月排行榜第三2017年5月 VC/MFC大版内专家分月排行榜第三2016年9月 VC/MFC大版内专家分月排行榜第三2016年4月 VC/MFC大版内专家分月排行榜第三2015年4月 VC/MFC大版内专家分月排行榜第三2012年8月 VC/MFC大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。C语言。为什么我这个程序没有输出。_百度知道
C语言。为什么我这个程序没有输出。
我有更好的答案
调用的时候加上括号看看?
采纳率:69%
来自团队:
函数调用时,小括号不可省略,尽管无参。加上小括号就可以了。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包c语言为什么没有java语言运行速度快
第一次讨论这个问题是我一边写activex控件和java applet程序,老孟提到了这个问题,直觉告诉我java的运行速度远快于c。如果不信的话,你可装一下6和vj6,写两个功能相同的程序,运行一下,你会感觉到从运行速度和编译速度上,vj不逊于vc,WFC好于MFC。大家会说java的IO处理不如c,这也是扯淡。我做过长时间的测试,同样的 2.6服务器apache和resin的吞吐量基本相同,没有性能的差异,nginx例外,不是人人都可以写出nginx。mustang也使用 epoll技术,java唯一没有作到就是没有办法直接从linux内核取得数据.还是需要把数据从内核空间复制到用户空间。java的对象池设计是个失误,我在sohu经常看见类似的代码,新建一个对象,然后放到memcache中,美其名曰,我用的时候,再从memcache取,殊不知,连接一次memcache,取到对象,再进行反序列化,恐怕上百个cpu指令都不够,新建一个java对象,不过10个cpu指令,而且这个对象啥时候释放,也是一个问题,不如新建一个单体,反复使用效率高。以下是其他网站的引用现代 JVM 中的分配比执行得最好的 malloc 实现还要快得多。HotSpot 1.4.2 之后中的 new Object() 常见代码路径最多 10 条机器指令(Sun 提供的数据;请参阅 参考资料),而用 C 语言实现的执行得最好的 malloc 实现,每个调用平均要求的指令在 60 到 100 条之间(Detlefs 等;请参阅 参考资料)。而且分配性能在整体性能中不是一个微不足道的部分,测评显示:对于许多实际的 C 和 C
程序(例如 Perl 和 Ghostscript),整体执行时间中的 20% 到 30% 都花在 malloc 和 free 上。如果不信,找段c程序看一看,很多语句就是malloc和free。这条“听起来有理的意见” (以大批量清理垃圾要比一天到晚一点点儿清理垃圾更容易)得到了数据的证实。一项研究(Z 请参阅 参考资料)测量了在许多常见 C
应用程序中,用保守的 Boehm-Demers-Weiser(BDW)替换 malloc 的效果,结果是:许多程序在采用垃圾收集而不是传统的分配器运行时,表现出了速度提升。(BDW 是个保守的、不移动的垃圾收集器,严重地限制了对分配和回收进行优化的能力,也限制了改善内存位置的能力;像 JVM 中使用的那些精确的浮动收集器可以做得更好。)在 JVM 中的分配并不总是这么快,早期 JVM 的分配和垃圾收集性能实际上很差,这当然就是 JVM 分配慢这一说法的起源。在非常早的时候,我们看到过许多“分配慢”的意见 —— 因为就像早期 JVM 中的一切一样,它确实慢 —— 而性能顾问提供了许多避免分配的技巧,例如对象池。(公共服务声明:除了对最重量的对象之外,对象池现在对于所有对象都是严重的性能损失,而且要在不造成并发瓶颈的情况下使用对象池也很需要技巧。)但是,从 JDK 1.0 开始已经发生了许多变化;JDK 1.2 中引入的分代收集器(generational collector)支持简单得多的分配方式,可以极大地提高性能。分代垃圾收集分代垃圾收集器把堆分成多代;多数 JVM 使用两代,“年轻代”和“年老代”。对象在年轻代中分配;如果它们在一定数量的垃圾收集之后仍然存在,就被当作是”长寿的“,并晋升到年老代。HotSpot 提供了使用三个年轻代收集器的选择(串行拷贝、并行拷贝和并行清理),它们都采用“拷贝”收集器的形式,有几个重要的公共特征。拷贝收集器把内存空间从中间分成两半,每次只使用一半。开始时,使用中的一半构成了可用内存的一个大块;分配器满足分配请求时,返回它没有使用的空间的前 N 个字节,并把指针(分隔“使用”部分)从“自由”部分移动过来,如清单 1 的伪代码所示。当使用的那一半用满时,垃圾收集器把所有活动对象(不是垃圾的那些对象)拷贝到另一半的底部(把堆压缩成连续的),然后从另一半开始分配。清单 1. 在存在拷贝收集器的情况下,分配器的行为void *malloc(int n) {if (heapTop - heapStart doGarbageCollection();void *wasStart = heapSheapStart
=return wasS}从这个伪代码可以看出为什么拷贝收集器可以实现这么快的分配 —— 分配新对象只是检查在堆中是否还有足够的剩余空间,如果还有,就移动指针。不需要搜索自由列表、最佳匹配、第一匹配、lookaside 列表 ,只要从堆中取出前 N 个字节,就成功了。如何回收?但是分配仅仅是内存管理的一半,回收是另一半。对于多数对象来说,直接垃圾收集的成本为零。这是因为,拷贝收集器不需要访问或拷贝死对象,只处理活动对象。所以在分配之后很快就变成垃圾的对象,不会造成收集周期的工作量。在典型的面向对象程序中,绝大多数对象(根据不同的研究,在 92% 到 98% 之间)“死于年轻”,这意味着它们在分配之后,通常在下一次垃圾收集之前,很快就变成垃圾。(这个属性叫作 分代假设,对于许多面向对象语言已经得到实际测试,证明为真。)所以,不仅分配要快,对于多数对象来说,回收也要自由。线程本地分配如果分配器完全像 清单 1 所示的那样实现,那么共享的 heapStart 字段会迅速变成显著的并发瓶颈,因为每个分配都要取得保护这个字段的锁。为了避免这个问题,多数 JVM 采用了 线程本地分配块,这时每个线程都从堆中分配一个更大的内存块,然后顺序地用这个线程本地块为小的分配请求提供服务。所以,线程花在获得共享堆锁的大量时间被大大减少,从而提高了并发性。(在传统的 malloc 实现的情况下要解决这个问题更困难,成本更高;把线程支持和垃圾收集都构建进平台促进了这类协作。)&堆栈分配C
向程序员提供了在堆或堆栈中分配对象的选择。基于堆栈的分配更有效:分配更便宜,回收成本真正为零,而且语言提供了隔离对象生命周期的帮助,减少了忘记释放对象的风险。另一方面,在 C
中,在发布或共享基于堆栈的对象的引用时,必须非常小心,因为在堆栈帧整理时,基于堆栈的对象会被自动释放,从而造成孤悬的指针。基于堆栈的分配的另一个优势是它对高速缓存更加友好。在现代的处理器上,缓存遗漏的成本非常显著,所以如果语言和运行时能够帮助程序实现更好的数据位置,就会提高性能。堆栈的顶部通常在高速缓存中是“热”的,而堆的顶部通常是“冷”的(因为从这部分内存使用之后可能过了很长时间)。所以,在堆上分配对象,比起在堆栈上分配对象,会带来更多缓存遗漏。更糟的是,在堆上分配对象时,缓存遗漏还有一个特别讨厌的内存交互。在从堆中分配内存时,不管上次使用内存之后留下了什么内容,内存中的内容都被当作垃圾。如果在堆的顶部分配的内存块不在缓存中,执行会在内存内容装入缓存的过程中出现延迟。然后,还要用 0 或其他初始值覆盖掉刚刚费时费力装入缓存的那些值,从而造成大量内存活动的浪费。(有些处理器,例如 Azul 的 Vega,包含加速堆分配的硬件支持。)escape 分析 语句没有提供任何明确地在堆栈上分配对象的方式,但是这个事实并不影响 JVM 仍然可以在适当的地方使用堆栈分配。JVM 可以使用叫作 escape 分析 的技术,通过这项技术,JVM 可以发现某些对象在它们的整个生命周期中都限制在单一线程内,还会发现这个生命周期绑定到指定堆栈帧的生命周期上。这样的对象可以安全地在堆栈上而不是在堆上分配。更好的是,对于小型对象,JVM 可以把分配工作完全优化掉,只把对象的字段放入寄存器。清单 2 显示了一个可以用 escape 分析把堆分配优化掉的示例。Component.getLocation() 方法对的位置做了一个保护性的拷贝,这样调用者就无法在不经意间改变组件的实际位置。先调用 getDistanceFrom() 得到另一个组件的位置,其中包括对象的分配,然后用 getLocation() 返回的 Point 的 x 和 y 字段计算两个组件之间的距离。清单 2. 返回复合值的典型的保护性拷贝方式public class Point {private int x,public Point(int x, int y) {this.x = this.y =}public Point(Point p) { this(p.x, p.y); }public int getX() { }public int getY() { }}public class Component {private Ppublic Point getLocation() { return new Point(location); }public double getDistanceFrom(Component other) {Point otherLocation = other.getLocation();int deltaX = otherLocation.getX() - location.getX();int deltaY = otherLocation.getY() - location.getY();return Math.sqrt(deltaX*deltaX
deltaY*deltaY);}}getLocation() 方法不知道它的调用者要如何处理它返回的 Point;有可能得到一个指向 Point 的引用,比如把它放在集合中,所以 getLocation() 采用了保护性的编码方式。但是,在这个示例中,getDistanceFrom() 并不会这么做,它只会使用 Point 很短的时间,然后释放它,这看起来像是对完美对象的浪费。聪明的 JVM 会看出将要进行的工作,并把保护性拷贝的分配优化掉。首先,对 getLocation() 的调用会变成内联的,对 getX() 和 getY() 的调用也同样处理,从而导致 getDistanceFrom() 的表现会像清单 3 一样有效。清单 3. 伪代码描述了把内联优化应用到 getDistanceFrom() 的结果public double getDistanceFrom(Component other) {Point otherLocation = new Point(other.x, other.y);int deltaX = otherLocation.x - location.x;int deltaY = otherLocation.y - location.y;return Math.sqrt(deltaX*deltaX
deltaY*deltaY);}在这一点上,escape 分析可以显示在第一行分配的对象永远不会脱离它的基本块,而 getDistanceFrom() 也永远不会修改 other 组件的状态。(escape 指的是对象引用没有保存到堆中,或者传递给可能保留一份拷贝的未知代千里之行 始于足下
欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 123 人关注过本帖
标题:不知道为什么程序用不了 找不到那里出错了 ,求解
等 级:新手上路
&&已结贴√
&&问题点数:20&&回复次数:4&&&
不知道为什么程序用不了 找不到那里出错了 ,求解
#include&stdio.h&
#include &stdlib.h&
#include&conio.h&&&&&&&&&&&&&&&& /*getch函数使用的头文件*/
#include&string.h&&&&&&&&&&&&&&&&/*strcmp函数使用的头文件*/
#define LEN_BOOK sizeof(struct book)
#define LEN_READER sizeof(struct reader)
#define BOOK_NUM 200
#define book_data book[i].num,book[i].num,book[i].name,book[i].author,book[i].press,book[i].amount
struct book
&&&&&int&&&&&&&&&&&&&&/*图书编码*/
&&&&&char name[10];&&&&&& /*图书名称*/
&&&&&char author[10];&&&&&/*图书作者*/
&&&&&char press[20];&&&&&&/*图书出版社*/
&&&&&&&&&&&&&& /*图书存货量*/
&struct book&&book[BOOK_NUM];
/*函数声明*/
int login();&&&&&&&&&&&&&&&&&/*用户登录函数*/
void showmainmenu();&&&&&&&&&/*显示主菜单函数*/
void managebook();&&&&&&&&& /*图书馆管理子系统*/
void showbook();&&&&&&&&&&&&/*显示图书信息*/
void addbook();&&&&&&&&&&&& /*增加图书信息*/
int&&searchbook();&&&&&&&&& /*查找图书信息*/
void deletebook();&&&&&&&&& /*删除图书信息*/
void modifybook();&&&&&&&&& /*修改图书信息*/
int readbookfile(char *pcMode);&&&&&&&&&/*从图书文件中读取图书记录*/
void savebookfile(int iBookId);&&&&&&&&/*将记录号为&&&的图书存入文件*/
int login()&&& /*用户登录函数*/
{&&&char username[10];&&&/*用户名*/
&&& char password[20];&&&/*密码*/
&&& int n=1;&&& /*登录次数*/
&&& int ok=0;&&/*登录成功标志*/
&&& while(n&=3)
&&&&&&&&system(&cls&);
&&&&&&&&printf(&\t\t------------------用户登录------------------\n\n\n&);
&&&&&&&&printf(&\t\t\t\t用户名:&);&&&&&&&&scanf(&%s&,username);
&&&&&&&&printf(&\t\t\t\t密&&码:&);&&&&&&&&scanf(&%s&,password);
&&&&&&&&if(strcmp(username,&1&)==0 && strcmp(password,&1&)==0)
&&&&&&&&{&&&ok=1;
&&&&&&&&&&&&&&& }
&&&&&&&&else
&&&&&&&&{&&&printf(&\n用户名或密码不正确,你还有%d次机会,请按任意键重新登录!\n&,3-n);
&&&&&&&&&&&&n++;
&&&&&&&&&&&&system(&pause&);&&& }
void init()&&&&&&/*系统初始化函数*/
&&& FILE *fp1;
&&& int n=0;
&&& printf(&\n初始化操作将删除原来的所有数据,继续吗?(Y/N)\n&);
&&& scanf(& %c&,&ch);
&&& if(ch!='Y' && ch!='y')
&&&&&& if((fp1=fopen(&book.dat&,&wb&))==NULL)/*二进制写方式打开文件*/
&&&&&& {&&printf(&\n文件打开失败,请按任意键返回!\n&);
&&&&&&&&& system(&pause&);/*getch();*/
&&&&&&&&&&&& }
&&&&&& fclose(fp1);&&&&&&
&&&&&printf(&初始化完毕,请按任意键返回\n&);
&&&&&system(&pause&);&&&&&&&&&&&& /*等待按键,返回主菜单*/
void main()
&&if(login())
&&{init();
&&&&&&managebook();
&&&void managebook()&&&&&&&&&/*图书馆管理系统*/
&&& while(1)
&&& system(&cls&);
&&& printf(&\t\t*************图书馆管理系统****************\n&);
&&& printf(&\t\t*&&&&&&&&&&&&&&&&&主菜单&&&&&&&&&&&&&&&&&&&&*\n&);
&&& printf(&\t\t*&&&&&&&&&&&& 1.显示图书信息&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&& 2.增加图书信息&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&& 3.图书信息查询&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&& 4.图书信息删除&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&& 5.图书信息修改&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&& 6.初 始 化&&&&&&&&&&&&&&&&&&&&*\n&);
&&& printf(&\t\t*&&&&&&&&&&&& 0.退&&& 出&&&&&&&&&&&&&&&&&&&&*\n&);
&&& printf(&\t\t*********************************************\n&);
&&& printf(&\t\t请选择 0-5\n&);
&&& scanf(&%d&,&choice);
&&& switch(choice)
&&&&&&&&case 1:
&&&&&&&&&&&&showbook();&&&&&&&&&&&&&&&/*显示图书信息*/
&&&&&&&&&&&&
&&&&&&&&case 2:
&&&&&&&&&&&&addbook();&&&&&&&&&&&&&&& /*增加图书信息*/
&&&&&&&&&&&&
&&&&&&&&case 3:
&&&&&&&&&&&&searchbook();&&&&&&&&&&&& /*查找图书信息*/
&&&&&&&&&&&&
&&&&&&&&case 4:
&&&&&&&&&&&& deletebook();&&&&&&&&/*删除图书信息*/
&&&&&&&&&&&&
&&&&&&&&case 5:
&&&&&&&&&&&&modifybook();&&&&&&&&/*修改图书信息*/
&&&&&&&&&&&&
&&&&&&&&case 6:
&&&&&&&&&&&&init();
&&&&&&&&&&&&
&&&&&&&&case 0:
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&default:
&&&&&&&&&&&&printf(&请输入0-6的数字&);
&&&&&&&&&&&&managebook();
&&&&&&&&&&&&
void showbook()&&&&&&&&&&&/*显示图书信息*/
&&& int i,
&&& system(&cls&);
&&& flag=readbookfile(&rb&);
&&& if(flag==-1)
&&&&&&&&printf(&文件打开失败!请先增加图书信息&);
&&& else if(flag==0)
&&&&&&&&printf(&文件中没有图书信息&);
&&&&&&&&printf(&\t|-------------------------------------------------|&);
&&&&&&&&printf(&\t编号\t书名\t作者\t出版社\t库存\n&);
&&&&&&&&for(i=0;i&i++)
&&&&&&&&&&&&printf(&\t%d\t%s\t%s\t%s\t%d\n&,book[i].num,book[i].num,book[i].name,book[i].author,book[i].press,book[i].amount);
&&&&&&&&&&&printf(&\t|-------------------------------------------------|&);
void addbook()&&&&&&&&&&&& /*增加图书信息*/
&&& FILE *
&&& int flag,iFlagExist,i;
&&&&&system(&cls&);
&&&&&flag=readbookfile(&ab+&);
&&&&&if(flag==-1)
&&&&&&&&&printf(&文件打开失败!\n&);
&&&&&else if(flag==0)
&&&&&&&&&printf(&没有图书记录!\n&);
&&&&&&&&&showbook();
&&&&&&//以下代码为循环录入图书信息
&&&&&printf(&请选择是否输入信息(y/n):&);
&&&&&getchar();
&&&&&ch=getchar();
&&&&&if(ch=='n'||ch=='N')
&&&&&&&&&&&&
&&&&&pfbook=fopen(&book.dat&,&ab+&);
&&&&&if(pfbook==NULL)
&&&&&&&&&printf(&文件打开失败!\n&);
&&&&&while(ch=='y'||ch=='Y')
&&&&&printf(&请输入图书编号:&);
&&&&&&&&&iFlagExist=0;
&&&&&&&&&scanf(&%d&,&book[flag].num);
&&&&&&&&&getchar();
&&&&&&&&&for(i=0;i&i++)
&&&&&&&&&{
&&&&&&&&&&&& if(book[i].num==book[flag].num)
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&iFlagExist=1;
&&&&&&&&&&&&&&&&&printf(&该图书编号已存在,请重新输入:&);
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&& }
&&&&&&&&&}
&&&&&}while(iFlagExist==1);
&&& /*新增图书的基本信息*/
&&& printf(&请输入图书名称:&);
&&& gets(book[flag].name);
&&& printf(&请输入图书作者:&);
&&& gets(book[flag].author);
&&& printf(&请输入图书出版社:&);
&&& gets(book[flag].press);
&&& printf(&请输入图书库存量:&);
&&& scanf(&%d&,&book[flag].amount);
&&& getchar();
&&& /*将新增的图书信息写入文件中*/
&&&if(fwrite(&book[flag],LEN_BOOK,1,pfbook)!=1)
&&&&&&printf(&无法保存该信息!\n&);
&&&&&&else
&&&{&&& printf(&*d号图书信息已保存\n&,book[flag].num);
&&&&&&&&flag++;
&&&&&& printf(&继续输入信息吗(y/n)&);
&&&&&& ch=getchar();
&&&&&& getchar();
&&&fclose(pfbook);
&&&printf(&添加图书执行完毕!\n&);
int&&searchbook()&&&&&&&&& /*查找图书信息*/
&&& int iBookNum,flag,iBookId,i;
&&& system(&cls&);
&&& flag=readbookfile(&rb&);
&&& if(flag==-1)
&&&&&&printf(&文件打开失败!\n&);
&&&&&&printf(&I按任意键返回子菜单|&);
&&&&&&getch();
&&&&&&return -2; //文件打开失败,返回-2
&&&else if(flag==0)
&&&&&printf(&没有图书记录!\n&);
&&&&&printf(&|按任意键返回子菜单|&);
&&&&&getch();
&&&&&return&&-3;
&&&/*以下进入查找程序*/
&&&printf(&请输入图书编号:&);
&&&scanf(&%d&,&iBookNum);
&&&getchar();
&&&for(i=0;i&i++)
&&&&&if(iBookNum==book[i].num)
&&&&&& iBookId=i;/*找到记录,返回记录号*/
&&&&&& printf(&*d号图书信息如下:\n&,iBookNum);
&&&&&& printf(&\t|-------------------------------------------------|&);&&/////////////////
&&&&&& printf(&\t编号\t书名\t作者\t出版社\t库存\n&);
&&&&&& printf(&\t\t%d\t%s\t%s\t%s\t%d\n&,book[i].num,book[i].num,book[i].name,book[i].author,book[i].press,book[i].amount);
&&&&&& printf(&\t|-------------------------------------------------|&);
&&&&&if(i==flag)/*遍历循环,没有找到记录,提示用户*/
&&&&&& printf(&找不到%d号图书信息!\n&,iBookNum);&&&&&&
&&&&&& iBookId=-1;&&/*找不到记录,返回-1*/
&&&&&return iBookId;
void deletebook()&&&&&&&&&/*删除图书信息*/
&&&FILE *pfB
&&&int iBookId,flag,i;/*文件指件*/
&&&char cF /*字符型变量,用于选择*/
&&&system(&cls&);
&&&iBookId=searchbook();
&&&if(iBookId==-1)
&&&flag=readbookfile(&rb&);
&&&printf(&已找到该图书,是否删除?(y/n)&);
&&&cFlag=getchar();
&&&getchar();
&&&if(cFlag=='n'||cFlag=='N')
&&&else if(cFlag=='y'||cFlag=='Y')
&&& for(i=iBookId;i&flag-1;i++)
&&& book[i]=book[i+1];/*数组依次前移*/
&&& flag--;
&&&pfBook=fopen(&book.dat&,&wb&);
&&&if(pfBook!=NULL)
&&& for(i=0;i&i++)/*将修改过的图书信息写人文件*/
&&&&&&if(fwrite(&book[i],LEN_BOOK,1,pfBook)!=1)
&&&&&&&&&printf(&无法保存该信息!\n&);
&&&&&fclose(pfBook);
&&&&&printf(&%d号图书信息已删除!\n&,book[iBookId].num);
int readbookfile(char *pcMode)&&& /*从图书文件中读取图书记录*/
{&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&int flag=0;
&&&&&FILE *pfB/*文件指针*/
&&&&&pfBook=fopen(&book.txt&,pcMode);
&&& if(pfBook==NULL)
&&&&&&&&return -1;
&&& while(!feof(pfBook))
&&&&&& if(fread(&book[flag],LEN_BOOK,1,pfBook))
&&&&&&&&&flag++;
&&& fclose(pfBook);
void savebookfile(int iBookId)&&&&&& /*将记录号为&&&的图书存入文件*/
&&& FILE *pfB
&&& pfBook=fopen(&book.dat&,&rb+&);
&&& if(pfBook!=NULL)
&&&&&&&&& fseek(pfBook,LEN_BOOK *iBookId,SEEK_SET);
&&&&&&&&& if(fwrite(&book[iBookId],LEN_BOOK,1,pfBook)!=1)
&&&&&&&&& printf(&无法保存该信息!\n&);
&&& fclose(pfBook);
void modifybook()&&&&&&&&& /*修改图书信息*/
{int iBookId,iBookRecord,iFlagExist,iItem,num,i;
&&&&&&system(&cls&);
&&&&&iBookId=searchbook();&&&&&&&&&&&&&&&/*调用查找图书函数获得图书记录*/
&&&&&if(iBookId==-1)&&&&&&&&&&&&&&&&&&&&&&&& /*未找到该序号的图书,直接返回*/
&&&&&/*找到该序号的图书,可以进行修改操作*/
&&&&&iBookRecord=readbookfile(&rb&);
&&& printf(&\t\t*******************修改******************\n&);
&&& printf(&\t\t*&&&&&&&&&&&&&&&&&子菜单&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&&&&&&&1.编码&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&&&&&&&2.书名&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&&&&&&&3.作者&&&&&&&&&&&&&&& *\n&);
&&& printf(&\t\t*&&&&&&&&&&&&&&&&&4.出版社&&&&&&&&&&&&&&*\n&);
&&& printf(&\t\t*&&&&&&&&&&&&&&&&&5.库存&&&&&&&&&&&&&&& *\n&);
&&& printf(&请输入想输入的信息\n&);
&&& scanf(&%d&,&iItem);
&&& getchar();
&&& switch(iItem)
&&& {&&case 1:
&&& printf(&请输入图书编号:&);
&&&iFlagExist=0;
&&&scanf(&%d&,&num);
&&&getchar();
&&&for(i=0;i&iBookRi++)
&&&&&& if(num==book[i].num &&i!=iBookId)
&&&&&& {&&& iFlagExist=1;
&&&&&&&&& printf(&错误,该图书编号已存在,请重新输入:&);
}&&&while(iFlagExist==1);
&&&&&&&&&book[iBookId].num=
&&& case 2:
&&&&&&&&&printf(&请输入图书名称:&);
&&&&&&&&&gets(book[iBookId].name);
&&& case 3:
&&&&&&&&&gets(book[iBookId].author);
&&&&&&&&&printf(&请输入图书作者:&);
&&& case 4:
&&&&&&&&&printf(&请输入图书出版社:&);
&&&&&&&&&gets(book[iBookId].press);
&&& case 5:
&&&&&&&&&printf(&请输入图书库存量:&);
&&&&&&&&&scanf(&%d&,&book[iBookId].amount);
&&&&&&&&&getchar();
&&& /*调用SaveBookFile函数将修改记录存人文件*/
&&& savebookfile(iBookId);
&&& printf(&图书信息修改成功!\n&);
来 自:神界
等 级:版主
威 望:366
帖 子:12471
专家分:49116
&&得分:20&
我猜,代码不是本人自己写的 所以无法运行
DO IT YOURSELF !
等 级:新手上路
看着书写的
来 自:神界
等 级:版主
威 望:366
帖 子:12471
专家分:49116
这算是小型文本型数据库的基本编程 若能独立完成 或者理解性完成&&C可以毕业了呀(所以不要幻想两三天搞定这个课题)
DO IT YOURSELF !
等 级:新手上路
我就说嘛 我们老师有病&&都没教数据库&&好烦
说个作业也不说清楚&&谢谢啦 我问问他去
版权所有,并保留所有权利。
Powered by , Processed in 0.157715 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved

我要回帖

更多关于 为什么要学c语言 的文章

 

随机推荐