C语言中怎样读取文件数据并对数据排序再重新写入文件?
C语言中怎样读取文件数据并对数据排序再重新写入文件,如图,前面两步已经写出,求重新写入的步骤 <br>
你好,很高兴为您解答。
我来回答吧: 首先是两个输入文件: 一个文本文件: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;igrade 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之类的文本编辑器,查看其二进制代码。
答:可以到CSDN去找找相关教程详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>