| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 304 人关注过本帖
标题:这个小函数怎么老是错呢?求解
只看楼主 加入收藏
qiankai
Rank: 2
等 级:论坛游民
帖 子:35
专家分:49
注 册:2012-4-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
这个小函数怎么老是错呢?求解
程序代码:
int Revise(char FileName[])

 {
     int i = 0, j;
     Node book, newbook;
     book.m = 1;
     newbook.m = 1;
     printf("请输入想要修改的图书的登录号\n");
     scanf("%ld", &newbook.Nub);
     FILE * fp ;
     fp = fopen(FileName, "r+");
      while(1){
               book.AuthorName[0] = '@';
               fread(&book, sizeof(book), 1, fp);
               if(book.AuthorName[0] == '@'){
                                     printf("Have not found! please try again !\n");
                                     return 0;
                                     }
               i++;
               if(newbook.Nub == book.Nub){
                              break;
                              }
               }
               printf("%d\n", i);
      FILE * fq ;
      fq = fopen(FileName, "r+");
      if(i == 1){   
                     printf("请输入新的登录号\n");
                     scanf("%ld", &newbook.Nub);
                     printf("%ld\n", newbook.Nub);
                     getchar();
                     printf("请输入新的书名\n");
                     gets(newbook.BookName);
                     printf("请输入新的作者名\n");
                     gets(newbook.AuthorName);
                     printf("请输入新的分类号\n");
                     scanf("%ld", &newbook.FLH);
                     printf("请输入新的出版单位\n");
                     getchar();
                     gets(newbook.PubUnit);
                     printf("请输入新的出版时间\n");
                     gets(newbook.PubTime);
                     printf("请输入新的价格\n");
                     gets(newbook.price);
                     fwrite(&newbook, sizeof(newbook), 1, fq);
                     fclose(fq);
                     printf("修改成功!!!\n");
                     }
      if(i != 1){
           fseek(fq, (i-1)*sizeof(newbook)+i-1, 0);      
                     printf("请输入新的登录号\n");
                     scanf("%ld", &newbook.Nub);
                     printf("%ld\n", newbook.Nub);
                     getchar();
                     printf("请输入新的书名\n");
                     gets(newbook.BookName);
                     printf("请输入新的作者名\n");
                     gets(newbook.AuthorName);
                     printf("请输入新的分类号\n");
                     scanf("%ld", &newbook.FLH);
                     printf("请输入新的出版单位\n");
                     getchar();
                     gets(newbook.PubUnit);
                     printf("请输入新的出版时间\n");
                     gets(newbook.PubTime);
                     printf("请输入新的价格\n");
                     gets(newbook.price);
                     fwrite(&newbook, sizeof(newbook), 1, fq);
                     fclose(fq);
                     printf("修改成功!!!\n");
                 }
                  }
                  }
为什么我在修改数据块的时候,虽然成功修改了我要修改的数据块,但后面的数据块就成乱码了?求解
2012-12-15 23:51
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:14 
这修改模块怎么多次打开文件,第一个还没有关闭,表示看不懂

小小战士,战士中的战斗机!
2012-12-16 18:32
qiankai
Rank: 2
等 级:论坛游民
帖 子:35
专家分:49
注 册:2012-4-22
收藏
得分:0 
回复 2楼 小小战士
每次循环读文件里的一个数据块,直到找到所要修改的数据块,记录是第几个数据块,然后退出循环,用fseek将文件指针从文件头移动到该位置,输入新数据然后进行覆盖。其实我做的就是图书信息管理系统。在实现其中这个功能时,出现了问题,让我头疼了很久了。我这么解释,你能看懂这段代码了吗?
2012-12-16 20:56
快速回复:这个小函数怎么老是错呢?求解
数据加载中...
 
   



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

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