C语言读写二进制文本文件(.txt),如果可行,加200分,先谢过
二进制格式如下:(记录格式)第1、2、3、4字节表示分数,接下来25字节表示姓名(姓名在20英文字符以内)假设文件内有若干条这样的记录,请将记录读出,按分数降序排序,再写...
二进制格式如下:(记录格式)
第1、2、3、4字节表示分数,接下来25字节表示姓名(姓名在20英文字符以内)假设文件内有若干条这样的记录,请将记录读出,按分数降序排序,再写入到原文件中 展开
第1、2、3、4字节表示分数,接下来25字节表示姓名(姓名在20英文字符以内)假设文件内有若干条这样的记录,请将记录读出,按分数降序排序,再写入到原文件中 展开
2个回答
展开全部
假定你用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;
}
假定 第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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询