网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月01日漏签0天
c语言吧 关注:798,912贴子:4,357,878
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 16回复贴,共1页
<<返回c语言吧
>0< 加载中...

新手请问.........

  • 只看楼主
  • 收藏

  • 回复
  • 嘿着着
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用c语言写了个结构体数组存入文件,现在想只修改文件当中某一项结构体数据,怎么弄,用fwrite改了一项,结果其它被清零了。。。。


  • 零4v索索鱼
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用fopen打开文件并创建一个结构体数组保存数据再用数组修改数据再fwrite保存整个数组?- -


2025-08-01 13:04:53
广告
不感兴趣
开通SVIP免广告
  • dingcmhk
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上程序代码,否则怎么找错


  • 嘿着着
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个函数是把数据读出来显示到屏幕上
void displaytime()
{
static int i=0;i++;
setcolor(WHITE);
setwritemode( R2_COPYPEN );
setlinestyle(NULL,NULL,3);
rectangle(3,3,167,43);
setfillstyle(BLACK);
floodfill(5,5,WHITE);
setfont(30, 0,"宋体");
outtextxy(6, 6, "用时");
outtextxy(135, 6, "秒");
outtextxy(90, 6, STR1);
if(i==longth)
{
rectangle(3,48,207,88);
floodfill(10,51,WHITE);
outtextxy(6,51, "总共用时");
outtextxy(175, 51, "秒");
outtextxy(140, 51, STR1);
}
}


  • 嘿着着
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
厄,粘错了,是这个函数把数据读出来显示到屏幕上
void displayrecord()
{
FILE *fp;
int i;
char m[10],str[10];
if((fp=fopen("Record.txt","rb"))==NULL)
{
printf("文件不能打开!!!");
return;
} setfont(26, 0,"宋体"); for(i=0;i<8;i++)
{
fread(&stage[i],sizeof(struct Record),1,fp);
switch(i)
{
case 0:strcpy(str,"第一关");break;
case 1:strcpy(str,"第二关");break;
case 2:strcpy(str,"第三关");break;
case 3:strcpy(str,"第四关");break;
case 4:strcpy(str,"第五关");break;
case 5:strcpy(str,"第六关");break;
case 6:strcpy(str,"第七关");break;
case 7:strcpy(str,"全关");break;
}
outtextxy(100,200+30*i,str);
outtextxy(310, 200+30*i, stage[i].name);
sprintf(m, "%d", stage[i].mark);
outtextxy(430,200+30*i, m);
}
fclose(fp);
}


  • 嘿着着
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
然后,这个就是游戏当中需要更改文件数据的函数了
其中s是游戏中其它函数产生的需要写入的数据
void updaterecord(int num)
{
FILE *fp;
char str[10]; if((fp=fopen("Record.txt","wb"))==NULL)
{
printf("文件不能打开!!!");
return;
}
if(stage[num].mark>s)
{
InputBox(str, 10, "新纪录!!! 请输入姓名:");
fread(&stage[num],sizeof(struct Record),1,fp);
stage[num].mark=s;
strcpy(stage[num].name,str);
if(fwrite(&stage[num],sizeof(struct Record),1,fp)!=1)printf("error");
}
fclose(fp);
}


  • 嘿着着
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是定义的结构体数组,文件里面就是这个,每次写入新数据后,就只有新数据保留下来了,其它清零了
struct Record
{
int mark;
char name[20];
}stage[longth+1];


  • 嘿着着
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
照你说的,建个临时文件,但是临时文件上就是写入不了数据,程序运行后,ecord.txt还是空白
void updaterecord(int num)
{
FILE *fp,*tp;
int i;
char str[10]; if((fp=fopen("Record.txt","rb"))==NULL)
{
printf("文件不能打开!!!");
return;
}
if(stage[num].mark>s)
{
if((tp=fopen("ecord.txt","wb"))==NULL)
{
printf("文件不能打开!!!");
return;
}
InputBox(str, 10, "新纪录!!! 请输入姓名:");
for(i=0;i<longth+1;i++)
{
if(i==num)
{
fread(&stage[num],sizeof(struct Record),1,fp);
stage[num].mark=s;
strcpy(stage[num].name,str);
fwrite(&stage[num],sizeof(struct Record),1,tp);
printf("%s ",stage[num].name);
printf("%d",stage[num].mark); //在这儿加了个显示函数,结果都能看到赋值成功了
}
else
{
fread(&stage[i],sizeof(struct Record),1,fp);
fwrite(&stage[i],sizeof(struct Record),1,tp);
}
}
}
fclose(fp);
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 16回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示