c语言新手求助

林北爱爪蛙 2011-03-09 07:56:41
为啥查询的时候内存会出错?
新手 书写不怎么规范 望见谅 求解答




struct book
{
int bookid,lend;//lend值为1时 为借出
char bookname,author;
}book[100];


void findbook(void)//查询
{
int i,findnum;
FILE *fp;
if((fp=fopen("d:\\log.txt","a+"))==NULL)
printf("出错!\n");
printf("输入要查询的编号\n");
scanf("%d",&findnum);
for (i=0;i<=100;i=i+1)
{
fread(&book[i],sizeof(book),1,fp);//读取文件
if (findnum==book[i].bookid) printf("你查询的图书编号为%d 书名为 %s 作者为 %s\n",book[i].bookid,book[i].bookname,book[i].author);

}

printf("不存在这本图书\n");


}
...全文
648 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
千杯不醉-sen 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 thinksth 的回复:]
引用 4 楼 issakkk 的回复:

引用 2 楼 linuxbirdman 的回复:
C/C++ code
fread(&amp;amp;book[i],sizeof(book),1,fp);//这参数传的有问题吧?


写的时候是fwrite(&amp;book[i],sizeof(struct book),1,fp); 这样的 有问题吗? 求大侠赐教啊

……
[/Quote]
这是潜规则
thinksth 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yangsen600 的回复:]

引用 11 楼 thinksth 的回复:
引用 4 楼 issakkk 的回复:

引用 2 楼 linuxbirdman 的回复:
C/C++ code
fread(&amp;amp;amp;book[i],sizeof(book),1,fp);//这参数传的有问题吧?


写的时候是fwrite(&amp;amp;book[i],sizeof(struct ……
[/Quote]

根本不存在这种限制
林北爱爪蛙 2011-03-09
  • 打赏
  • 举报
回复
最主要是bookname和author要加[]
thinksth 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chentian0926 的回复:]

struct book
{
int bookid,lend;//lend值为1时 为借出
char bookname,author;
}book[100];


那个声明的名字不要跟结构名称一样 就OK了
[/Quote]

我看这并不是问题
thinksth 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 issakkk 的回复:]

引用 2 楼 linuxbirdman 的回复:
C/C++ code
fread(&amp;book[i],sizeof(book),1,fp);//这参数传的有问题吧?


写的时候是fwrite(&book[i],sizeof(struct book),1,fp); 这样的 有问题吗? 求大侠赐教啊
[/Quote]

很奇怪,为什么这两个名字不可以相同,完全是不相干的两个东西嘛

谁能给简单解释一下?
林北爱爪蛙 2011-03-09
  • 打赏
  • 举报
回复
哦 我明白了 那不是数组是长度 谢谢大家
林北爱爪蛙 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yangsen600 的回复:]

错误很多,上面是改过的。
struct book
{
int bookid,lend;//lend值为1时 为借出
char bookname,author;
}book[100];


void findbook(void)//查询
{
int i,findnum;
FILE *fp;
if((fp=fopen("d:\\log.txt","a+……
[/Quote]

我想问一下 为啥bookname,author这两个都要弄成数组呢? 不是book[i].bookname 这样就可以了吗?
林北爱爪蛙 2011-03-09
  • 打赏
  • 举报
回复
谢谢大家啊~~~ ok了 !
千杯不醉-sen 2011-03-09
  • 打赏
  • 举报
回复
错误很多,上面是改过的。
struct book
{
int bookid,lend;//lend值为1时 为借出
char bookname,author;
}book[100];


void findbook(void)//查询
{
int i,findnum;
FILE *fp;
if((fp=fopen("d:\\log.txt","a+"))==NULL)
printf("出错!\n");
printf("输入要查询的编号\n");
scanf("%d",&findnum);
for (i=0;i<=100;i=i+1)
{
fread(&book[i],sizeof(book),1,fp);//读取文件
if (findnum==book[i].bookid) printf("你查询的图书编号为%d 书名为 %s 作者为 %s\n",book[i].bookid,book[i].bookname,book[i].author);

}

printf("不存在这本图书\n");


}
千杯不醉-sen 2011-03-09
  • 打赏
  • 举报
回复

struct Book
{
int bookid,lend;//lend值为1时 为借出
char bookname[20],author[20];
}BOOK[100];

void findbook(void){
int i,findnum;
FILE *fp = NULL;
if((fp=fopen("log.txt","a+"))==NULL){
printf("出错!\n");
}
printf("输入要查询的编号\n");
scanf("%d",&findnum);
for (i=0;i<100;i++){
fread(&BOOK[i],sizeof(struct Book),1,fp);//读取文件
if (findnum==BOOK[i].bookid){
printf("你查询的图书编号为%d 书名为 %s 作者为 %s\n",
BOOK[i].bookid,BOOK[i].bookname,BOOK[i].author);
}

}
printf("不存在这本图书\n");
}
chentian0926 2011-03-09
  • 打赏
  • 举报
回复
struct book
{
int bookid,lend;//lend值为1时 为借出
char bookname,author;
}book[100];


那个声明的名字不要跟结构名称一样 就OK了
林北爱爪蛙 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 linuxbirdman 的回复:]
C/C++ code
fread(&book[i],sizeof(book),1,fp);//这参数传的有问题吧?
[/Quote]

写的时候是fwrite(&book[i],sizeof(struct book),1,fp); 这样的 有问题吗? 求大侠赐教啊
林北爱爪蛙 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 c395565746c 的回复:]
for (i=0;i<=100;i=i+1)
i不能==100。。。过界了
[/Quote]

还是不行啊 无法把book[i].bookid,book[i].bookname,book[i].author 这些printf出来啊
LinuxBirdMan 2011-03-09
  • 打赏
  • 举报
回复
fread(&book[i],sizeof(book),1,fp);//这参数传的有问题吧?
「已注销」 2011-03-09
  • 打赏
  • 举报
回复
for (i=0;i<=100;i=i+1)
i不能==100。。。过界了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧