c语言结构体 从一个二进制文件里读取一个结构体时出现如图的显示(我先前已经吧数据写入文件了)求解

c语言 怎么将结构体写入文件_百度知道
c语言 怎么将结构体写入文件
结构体写入文件是有前提的,你的结构体中不能出现指针,如果确定结构体中没有指针的话,就可以进行如下操作typedef struct {//中间不能定义指针;}a;a var //结构体定义的变量fwrite(&var, sizeof(a), sizeof(a), hfile);
其他类似问题
为您推荐:
提问者采纳
读 10个结构fclose(fp),1,用fwrite 写文件;
&#47,用fread读;/,1,& 读1个结构for (i=0; fp=fopen(&quot,读也按整个结构读;&#47,sizeof(stu),&10; 写1个结构for (i=0;
&#47,sizeof(student),fp).这样;10;i++) fwrite(&student[i];
/i&lt,sizeof(stu),fp),1,写的时候按整个结构写;/i&;fwrite(&),1,字符串有空白也没关系;i++) fread(&student[i];rb&quot.dat&quot。FILE *fread(&wb&quot,sizeof(student); fp=fopen(&&#47.dat&
写10个结构fclose(fp),fp),fp)最好用2进制方法打开文件。读时也用用2进制方法打开文件
确实解决了这个问题,那么,为什么用二进制打开文件呢?还有,我的文件是.txt格式的,用fwrite写,那文件就只能通过vc来打开,而不能直接打开看了,这问题大不大?
二进制打开文件, 输入输出 按字节读写,不做数据转换,读写速度快,处理大量数据时(一般实际工作中使用)用二进制 快 许许多多倍。是 不能直接打开看,或者说可以打开,但肉眼不能识别意思(除字符串)。鱼和熊掌不能兼得。文件名 也可叫 .txt
提问者评价
谢谢,知道了
其他1条回答
只要不与字符串中的字母相同即可,j); ); stream = fopen( &quot.out&quot,%d&#92, &quot, &quot,s, i,比如; 在读入时就不会错了;n&quot,%s;:FILE *stream在输出到文件时;w&quot?可以用逗号或者其他的符号; 读完后关闭文件fclose( stream );;%d; fprintf( stream,为什么要用空格作为区分标志呢
那么,读取时用什么函数呢?我若用fscanf(stream,&%d,%s,%d&,&i,s,&j)他仍然会默认把%s里面的空格作为区分标志
读的时候,把文件一次读出到一个长字符串中,再用标志区分各个数据。
嗯,知道了,谢谢
结构体的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言:从一个二进制文件中读入结构体数据,并把结构体数据显示在终端屏幕上。_百度知道
C语言:从一个二进制文件中读入结构体数据,并把结构体数据显示在终端屏幕上。
//a.baidu.hiphotos.baidu.baidu.jpg" esrc="http./zhidao/pic/item/c8ea15ce36d3d539b6f76dbcab082.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http://a://a.com/zhidao/wh%3D600%2C800/sign=/zhidao/wh%3D450%2C600/sign=5e28dafecbe060637ebe6e/c8ea15ce36d3d539b6f76dbcab082&<a href="http
提问者采纳
FILE *f sizeof(struct rec) r.num,r.total
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
来自团队:
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁共有 274 人关注过本帖
标题:C语言文件操作这一块的几个问题 求解决
等 级:新手上路
&&已结贴√
&&问题点数:20&&回复次数:5&&&
C语言文件操作这一块的几个问题 求解决
&&&&&&&&&我先简单的说明一下问题
&&&&&&&&&&&&&&& 我写了一个学生管理系统&&其中 有 添加 , 删除 ,查看所有学生&&这几个功能
&&&&&&&&&&&&&&&&&&&&&&&我想把所有数据保存到二进制文件当中
&&&&&&&&&&&&&&&&&& 我先是定义了一个学生信息的结构体
&&&&&&&&&&&&然后我声明了一个结构体数组 stu[LEN];
&&&&&&&&&&&1.&&添加功能 我以追加(ab) 的形式打开了二进制文件&&&然后遇到一个问题&&我使用追加的话&&我再输出时发现&&前面有一个空的结构体信息&&&而我所添加的学生信息 都从第二行开始显示&&第一行的值是 0&&&&&&&&&&&& 这可能是因为我以追加的形式打开了文件&&& 那么我如何解决这个问题&&因为我添加学生的时候 我要追加到后面
&&&&&&&&&&&&&&&
&&&&&&&&&&&2&&看所有学生功能
&&&&&&&&&&&&&&& 首先我添加完之后&&比如我添加了N个学生&&&&&我想用for循环 将其全部读取到一个结构体中 然后将其输出&&&那么我如何确定我要读取多少个&&&也就是for循环走几次&&因为我只想读取学生的信息&&如果我使用LEN 的话&&for会走 LEN 次&&会读出一些空值&&
&&&&&&&&&&&&&&3.&&删除功能
&&&&&&&&&&&&&&&&&&&&&&&&&&这个功能我是这样想的&&&&&& 把文件中的数据 全部读到一个结构体数组中&&然后用for循环删除这个数组中的某一学生&&然后再将这个数组中的数据全部写入到二进制文件中
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 但是这个过程中 我想直接把文件中原本的信息覆盖了&&具体该怎么做 求指点
&&下面是源代码 求指点
struct student{
&&& char name[20];
&&& char xingbie[20];
&&& char address[100];
struct student stu[LEN];
struct student stu1[LEN];
struct student stu2[LEN];
&&&&&&功能文件&&
#include &tou.h&
void tianjia(struct student stu[]){
&&& FILE *
&&& for(i=0;i&LEN;i++){
&&&&&&&&p=i;
&&&&&&&&printf(&请输入学生的姓名\n&);
&&&&&&&&scanf(&%s&,stu[i].name);
&&&&&&&&fflush(stdin);
&&&&&&&&printf(&请输入学生的年龄\n&);
&&&&&&&&scanf(&%d&,&stu[i].age);
&&&&&&&&fflush(stdin);
&&&&&&&&printf(&请输入学生的性别\n&);
&&&&&&&&scanf(&%s&,stu[i].xingbie);
&&&&&&&&fflush(stdin);
&&&&&&&&printf(&请输入学生住址\n&);
&&&&&&&&scanf(&%s&,stu[i].address);
&&&&&&&&fflush(stdin);
&&&&&&&&printf(&请输入学生的成绩\n&);
&&&&&&&&scanf(&%d&,&stu[i].chengji);
&&&&&&&&fflush(stdin);
&&&&&&&&printf(&请输入学生的积分\n&);
&&&&&&&&scanf(&%d&,&stu[i].jifen);
&&&&&&&&fflush(stdin);
&&&&&&&&fp=fopen(&学生数据&,&ab+&);
&&&&&&&&if(fp==NULL){
&&&&&&&&&&&&printf(&文件操作失败&);
&&&&&&&&rewind(fp);
&&&&&&&&fwrite(&stu[i],sizeof(struct student),1,fp);
&&&&&&&&fclose(fp);
&&&&&&&&printf(&是否继续添加(y/n)\n&);
&&&&&&&&fflush(stdin);
&&&&&&&&ch=getchar();
&&&&&&&&if(ch=='n'||ch=='N'){
&&&&&&&&&&&&
&&& printf(&\n&);
&&& printf(& _按回车键返回主菜单!\n&);
&&& getchar();
void chakan(struct student stu1[]){
&&& int i=0;
&&& FILE *
&&& fp=fopen(&学生数据&,&rb&);
&&& if(fp==NULL){
&&&&&&&&printf(&文件操作失败\n&);
&&& rewind(fp); //重置文件指针位置
&&& for(i=0;i&5;i++){
&&&&&&&&fread(&stu1[i],sizeof(struct student),1,fp);
&&&&&&&&AA;
&&& for(i=0;i&5;i++){
&&&&&&&&BB;
&&& printf(&\n&);
&&& printf(& _按回车键返回主菜单!\n&);
&&& getchar();
&&& fclose(fp);
void chazhao(struct student stu1[]){
&&& int i,a=0;
&&& FILE *
&&& char ch[20];
&&& fp=fopen(&学生数据&,&rb&);
&&& if(fp==NULL){
&&&&&&&&printf(&操作失败\n&);
&&& for(i=0;i&LEN;i++){
&&&&&&&&fread(&stu1[i],sizeof(struct student),1,fp);
&&& printf(&请输入要查找的学生姓名\n&);
&&& scanf(&%s&,&ch);
&&& for(i=0;i&LEN;i++){
&&&&&&&&if(strcmp(ch,stu1[i].name)==0){
&&&&&&&&&&&&AA;
&&&&&&&&&&&&BB;
&&&&&&&&&&&&getchar();
&&&&&&&&}else{
&&&&&&&&&&&&a++;
&&& if(a==LEN){
&&&&&&&&printf(&未找到!\n&);
&&& fclose(fp);
&&& printf(&\n&);
&&& printf(& _按回车键返回主菜单!\n&);
&&& getchar();
void shanchu(struct student stu2[]){
&&& int i,j,a=0;
&&& FILE *
&&& char ch[20];
&&& fp=fopen(&学生数据&,&ab+&);
&&& if(fp==NULL){
&&&&&&&&printf(&操作失败\n&);
&&& rewind(fp);
&&& for(i=0;i&LEN;i++){
&&&&&&&&fread(&stu2[i],sizeof(struct student),1,fp);
&&& printf(&请输入你要删除的学生姓名\n&);
&&& scanf(&%s&,ch);
&&& for(i=0;i&LEN;i++){
&&&&&&&&if(strcmp(ch,stu2[i].name)==0){
&&&&&&&&&&&&for(j=0;j&LEN;j++){
&&&&&&&&&&&&&&& stu2[j]=stu2[j+1];
&&&&&&&&&&&&}
&&& rewind(fp);
&&& fwrite(&stu2[i],sizeof(struct student),1,fp);
&&& fclose(fp);
&&& for(i=0;i&LEN;i++){
&&&&&&&&printf(&\t%s\t%d\t%s\t%s\t%d\t%d\n&,stu2[i].name,stu2[i].age,stu2[i].xingbie,stu2[i].address,stu2[i].chengji,stu2[i].jifen);
&&& printf(&\n&);
&&& printf(& _按回车键返回主菜单!\n&);
&&& fflush(stdin);
&&& getchar();
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:新手上路
求高人解决啊
等 级:新手上路
#include &stdio.h&
#include &stdlib.h&
#include &windows.h&
#include &string.h&
#define AA printf(&\t姓名\t年龄\t性别\t住址\t成绩\t积分\t\n\n&);
#define BB printf(&\t%s\t%d\t%s\t%s\t%d\t%d\n&,stu1[i].name,stu1[i].age,stu1[i].xingbie,stu1[i].address,stu1[i].chengji,stu1[i].jifen);
#define CC printf(&\t%s\t%d\t%s\t%s\t%d\t%d\n&,stu[i].name,stu[i].age,stu[i].xingbie,stu[i].address,stu[i].chengji,stu[i].jifen);
#define LEN 100
等 级:新手上路
为什么人都是来来往往 不回帖啊
等 级:贵宾
威 望:11
帖 子:303
专家分:1019
&&得分:10&
把你遇到的问题说明白。
贴出这么多代码, 一句有用的注释都没有,别人怎么知道你到底想问什么问题?
代码测试环境:&&WinXP+C-Free5.0.
来 自:流年
等 级:版主
威 望:78
帖 子:2613
专家分:13167
&&得分:10&
编译信息呢
一片落叶掉进了回忆的流年。
版权所有,并保留所有权利。
Powered by , Processed in 0.035211 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved}

我要回帖

更多关于 c语言 结构体初始化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信