搜索
查看: 1438|回复: 11
打印 上一主题 下一主题

大家帮我看看错哪了

[复制链接]
跳转到指定楼层
楼主
发表于 2013-9-13 09:44:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
struct student
{int num;
char name[20];
int score;
};
stu[5];
void save()
    {FILE *fp;
    int i;
    if((fp=fopen("D:\\QQQ\\stu.dat","wb"))==NULL)
    {printf("can not open file\n");
    return;
    }
    for(i=0;i<5;i++)
    {if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
    printf("file write error\n");
    fclose(fp);
    }
int main()
{struct student stu[5];
int i;
for(i=0;i<5;i++)
scanf("%d%s%d",&stu[i].num,&stu[i].name,&stu[i].score);
save();
system("pause");
return 0;
   
}

沙发
发表于 2013-9-13 10:47:55 | 只看该作者
{if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)这里错了!多少半个大括号
板凳
发表于 2013-9-13 10:48:01 | 只看该作者
{if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)这里错了!多半个大括号
地板
发表于 2013-9-13 11:24:07 | 只看该作者
一个是你声明了两个stu
第一个前面有分号所以stu没类型
读取的时候保存在main中stu的内存空间中,save那个函数看不到main中的stu,所以会把最外层的stu的数据(为空)写进文件里

还有就是  scanf("%d%s%d", ....) 这种读取很不妙
scanf("%d %s %d", ....) 会好一些

save最后还少了个大括号
5#
 楼主| 发表于 2013-9-14 08:12:48 | 只看该作者
rosynirvana 发表于 2013-9-13 11:24
一个是你声明了两个stu
第一个前面有分号所以stu没类型
读取的时候保存在main中stu的内存空间中,save那个 ...

已经改好了,可是为什么存储进去的学号和分数的是乱码形式啊?
这是什么原因啊,应该怎么改呢?
下面是代码:
#include <stdio.h>
#include <stdlib.h>
struct student
{int num;
char name[20];
int score;
}stu[5];
void save()
    {FILE *fp;
    int i;
    if((fp=fopen("D:\\QQQ\\stu.dat","wb"))==NULL)
    {printf("can not open file\n");
    return;
    }
    for(i=0;i<5;i++)
    if(fwrite(&stu,sizeof(struct student),1,fp)!=1)
    printf("file write error\n");
    fclose(fp);
    }
int main()
{system("color f3");
printf("****欢迎使用学生信息查询系统****\n");
printf("\n");
printf("请输入学生信息:\n");
int i,a,b;
for(i=0;i<5;i++)
scanf("%d %s %d",&stu.num,stu.name,&stu.score);
printf("\n");
printf("录入学生成绩如下:\n");
for(i=0;i<5;i++)
printf("%d %s %d\n",stu.num,stu.name,stu.score);
printf("\n");
printf("请输入要查询学生学号:");
scanf("%d",&a);
printf("该学生的信息如下:\n");
printf("%d %s %d\n",stu[a-1].num,stu[a-1].name,stu[a-1].score);
printf("\n");
printf("如若有误,请输入错误信息学生学号:");
scanf("%d",&b);
printf("请输入纠正后的信息:\n");
scanf("%d %s %d",&stu[b-1].num,&stu[b-1].name,&stu[b-1].score);
printf("\n");
printf("已更正学生成绩如下:\n");
for(i=0;i<5;i++)
printf("%d %s %d\n",stu.num,stu.name,stu.score);
save();
printf("\n");
printf("录入学生成绩已保存在D:\\QQQ\\stu.dat\n");
printf("\n");
       
        system("pause");
        return 0;
}
6#
发表于 2013-9-14 10:35:33 | 只看该作者
wangshuainan 发表于 2013-9-14 08:12
已经改好了,可是为什么存储进去的学号和分数的是乱码形式啊?
这是什么原因啊,应该怎么改呢?
下面是 ...

是不是你保存成二进制然后用文本编辑器打开看的?
7#
 楼主| 发表于 2013-9-16 12:37:48 | 只看该作者
rosynirvana 发表于 2013-9-14 10:35
是不是你保存成二进制然后用文本编辑器打开看的?

是用文本打开的,可是是不是用二进制存储的不知道,这个怎么修改呢,怎么确定它的存储类型
8#
发表于 2013-9-16 14:44:58 | 只看该作者
wangshuainan 发表于 2013-9-16 12:37
是用文本打开的,可是是不是用二进制存储的不知道,这个怎么修改呢,怎么确定它的存储类型

如果是上面这段代码产生的文件
这一句
  1. if((fp=fopen("D:\\QQQ\\stu.dat","wb"))==NULL)
复制代码
文件打开方式是wb,也就是writable binary
文件会以二进制方法保存

如果你要用普通文本编辑器去查看,把wb中的b去掉,文件就会以文本形式保存了
9#
 楼主| 发表于 2013-9-16 22:01:44 | 只看该作者
rosynirvana 发表于 2013-9-16 14:44
如果是上面这段代码产生的文件
这一句文件打开方式是wb,也就是writable binary
文件会以二进制方法保存 ...

wb是只写,我改成r+读写都行的,也不行啊
10#
 楼主| 发表于 2013-9-16 22:02:27 | 只看该作者
怎么能够正常存储十进制的呢

11#
 楼主| 发表于 2013-9-16 22:03:01 | 只看该作者
wangshuainan 发表于 2013-9-16 22:01
wb是只写,我改成r+读写都行的,也不行啊

怎么才能正常回复十进制的呢?
12#
发表于 2013-9-16 22:05:58 | 只看该作者
wangshuainan 发表于 2013-9-16 22:01
wb是只写,我改成r+读写都行的,也不行啊

和你说了把b去掉
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表