C语言中怎样读取文件数据并对数据排序再
我来回答吧:
首先是两个输入文件:
一个文本文件:scoret。txt
一个二进制文件:scoreb。txt
文本文件scoret。txt我们可以直接编辑(按要求编辑五个学生的姓名和成绩),而二进制文件不易编辑。
我们先写一个代码,实再将scoret。txt文件转成二进制文件scoreb。txt
#include
#include
#include
struct stu {
char name[30];
int grade;
};
int main()
{
int i,n;
struct stu s[10];
FILE *fpIt,*fpIb; /*输入*/
FILE *fpOt,*f...全部
我来回答吧:
首先是两个输入文件:
一个文本文件:scoret。txt
一个二进制文件:scoreb。txt
文本文件scoret。txt我们可以直接编辑(按要求编辑五个学生的姓名和成绩),而二进制文件不易编辑。
我们先写一个代码,实再将scoret。txt文件转成二进制文件scoreb。txt
#include
#include
#include
struct stu {
char name[30];
int grade;
};
int main()
{
int i,n;
struct stu s[10];
FILE *fpIt,*fpIb; /*输入*/
FILE *fpOt,*fpOb; /*输出*/
fpIt=fopen("scoret。
txt","r");
fpIb=fopen("scoreb。txt","wb");
if (fpIt==NULL || fpIb==NULL)
{
printf("File Open Error:\npress any key to exit:\n");
getch();
return -1;
}
i=0;
while (!feof(fpIt))
{
fgets(s[i]。
name,30,fpIt); /*有空格只能这样输入*/
fscanf(fpIt,"%d\n",&s[i]。grade); /*文本输入*/
printf("i=%d,name=%s\t grade=%d\n",i,s[i]。
name,s[i]。grade);
getch();
fwrite(&s[i],sizeof(struct stu),1,fpIb);
i++;
}
n=i;
printf("n=%d\n",n);
fclose(fpIt);
fclose(fpIb);
getch();
return 0;
}
===============
上面的代码在TC或VC下编辑运行,就可以生成scoreb。
txt文件。这时scoreb。txt的学生信息与scoret。txt是一样的。
接着就要修改一下scoret。txt文件的内容,重新编辑5个学生的信息给scoreb。txt
这样使得scoret。
txt与scoreb。txt分别各有五个学生的信息。
当然你如果有原始文件的话,上面都是浮云。
下面是你这个问题的重点:
#include
#include
#include
#include
struct stu {
char name[30];
int grade;
};
int main()
{
int i,j,n;
struct stu s[10],temp;
FILE *fpIt,*fpIb; /*输入*/
FILE *fpOt,*fpOb; /*输出*/
fpIt=fopen("scoret。
txt","r");
fpIb=fopen("scoreb。txt","rb");
fpOt=fopen("scoreOt。txt","w");
fpOb=fopen("scoreOb。
txt","wb");
if (fpIt==NULL || fpIb==NULL || fpOt==NULL || fpOb==NULL)
{
printf("File Open Error:\npress any key to exit:\n");
getch();
return -1;
}
n=0;
while (!feof(fpIt))
{
fgets(s[n]。
name,30,fpIt); /*有空格只能这样输入*/
fscanf(fpIt,"%d\n",&s[n]。grade); /*文本输入*/
printf("n=%d,name=%s\t grade=%d\n",n,s[n]。
name,s[n]。grade);
getch();
n++;
}
fclose(fpIt);
printf("===========\n");
while (!feof(fpIb) && n<10)
{
fread(&s[n],sizeof(struct stu),1,fpIb);
printf("n=%d,name=%s\t grade=%d\n",n,s[n]。
name,s[n]。grade);
getch();
n++;
}
printf("n=%d\n",n);
fclose(fpIb);
/*排序*/
for (i=0;i grade grade,s[i]。name);
/*写文件*/
for (i=0;i<5;i++)
fprintf(fpOt,"%s%d\n",s[i]。name,s[i]。grade);
fclose(fpOt);
for (i=5;i<10;i++)
fwrite(&s[i],sizeof(struct stu),1,fpOt);
fclose(fpOt);
getch();
return 0;
}
==============================
总结:
文本文件一般用:
读:fscanf函数或fgets函数,
写:fprintf函数即可(当然也可以用fputs函数)
二进制文件一般用:
读:fread函数
写:fwrite函数。
当然二进制文件你如果用记事本打开的话,一般是乱码。你可以弄一个UltraEdit之类的文本编辑器,查看其二进制代码。收起