C语言读写二进制文本文件(.txt),如果可行,加200分,先谢过

二进制格式如下:(记录格式)第1、2、3、4字节表示分数,接下来25字节表示姓名(姓名在20英文字符以内)假设文件内有若干条这样的记录,请将记录读出,按分数降序排序,再写... 二进制格式如下:(记录格式)
第1、2、3、4字节表示分数,接下来25字节表示姓名(姓名在20英文字符以内)假设文件内有若干条这样的记录,请将记录读出,按分数降序排序,再写入到原文件中
展开
 我来答
金色潜鸟
2013-04-06 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5699万
展开全部
假定你用MS VC++ 6.0 编译器,不是TC.
假定 第1、2、3、4字节表示分数, 是 int 型
文件名 abc.txt
如果还没有2进制文件,则可以自己建1个,假定数据为:
// int mark[1000]={60,70,80,95,30};
// char m[1000][25]={"zhang","wang","Li","Zhao","Fang"};
打开写入:
// fin=fopen(namein,"wb+");
// for (i=0;i<n;i++) { fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);}
// fclose(fin);
再运行。
下面没有使用“结构”,分数存 mark[], 人名存 m[][25].

#include <stdio.h>
int main() {
FILE *fin;
char namein[80]="abc.txt";
int mark[1000],t;
char m[1000][25],ts[25];
int i,j,n=0;
fin=fopen(namein,"rb+");
if (!fin){
printf("open %s error\n",namein);
}

while(1){
fread(&mark[n],4,1,fin);
if (feof(fin)) break;
fread(&m[n],25,1,fin);
if (feof(fin)) break;
n++;
}
printf("I read %d data\n",n);
for (i=0;i<n;i++) printf("%d %s\n",mark[i],m[i]);

for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++){
if (mark[j]>mark[i]){
t = mark[i];mark[i]=mark[j];mark[j]=t;
strcpy(ts,m[i]); strcpy(m[i],m[j]);strcpy(m[j],ts);
}
}

rewind(fin);
for (i=0;i<n;i++)
{ fwrite(&mark[i],4,1,fin);fwrite(m[i],25,1,fin);}
fclose(fin);

return 0;
}
appaul
2013-04-05 · TA获得超过3730个赞
知道大有可为答主
回答量:1.1万
采纳率:9%
帮助的人:1103万
展开全部
您尝试输入其他字符,输入韩寒
26控制字符Ctrl Z到W +文本读取和写入26结尾的文件,结果文件末尾开放,你会得到一个随机值,B是不分配。您可以尝试在B的定义,初始化,运行程序,你输入26,b的值初始化时间的产值,但除了到其他26个输入输出汉族。
WB +二进制模式,刚读。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式