#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define SCORES 5 #define S 3 typedef struct { int num; char *name; char sex[2]; float score[SCORES]; float total; } STU; //输入n个学生的信息 void initInfo(STU * st,int n); //保存n个学生文件 void saveAsFile(STU * st,int n); //根据4门功课分数排序 void sortByScore(STU * st,int n); //读取文件 void readFile(STU * st,int n); int main(){ STU ps[S]; initInfo(ps,S); sortByScore(ps,S); saveAsFile(ps,S); readFile(ps,S); //释放name //int i; //for(i=0;i<S;i++) // free((ps+i)->name); return 0; } void initInfo(STU * p,int n){ int i,j; for(i=0;i<n;i++){ char tmp[10]; int len; printf("\n---- 请输入第%d个学生的信息-------",i+1); printf("\n请输入编号:"); if((scanf("%d",&((p+i)->num)))!=1) return; printf("\n请输入姓名:"); if(scanf("%s",tmp)==1){ len=strlen(tmp); (p+i)->name=(char *)malloc(len+1); strcpy((p+i)->name,tmp); }else{ return; } printf("\n请输入性别:"); if(scanf("%s",(p+i)->sex)!=1) { free((p+i)->name);//函数return终止释放name return; } printf("\n请输入5门功课分数:\n"); //memset((p+i)->score,0,sizeof(int)*SCORES); for(j=0;j<SCORES;j++){ if(scanf("%f",(p+i)->score+j)!=1){ break; }else{ (p+i)->total+=(p+i)->score[j]; } } //对于未输入的赋值0 for(;j<SCORES;j++) (p+i)->score[j]=0; //释放name //free((p+i)->name); } } //根据学生分数排序 void sortByScore(STU * pst, int n){ int i,j; STU st; for(i=0;i<n;i++){ for(j=0;j<n-i-1;j++){ if((pst+j)->total>(pst+j+1)->total){ st=*(pst+j); *(pst+j)=*(pst+j+1); *(pst+j+1)=st; } } } } //保存n个学生的信息至students文件 void saveAsFile(STU * pst,int n){ FILE *f; int i; if((f=fopen("students","wb"))==NULL){ printf("cannt opent file."); exit(0); } printf("-----------开始写入文件-----------------\n"); for(i=0;i<n;i++) if(fwrite(pst+i,sizeof(STU),1,f)!=1) printf("file write error"); printf("-----------写入文件成功-----------------\n"); fclose(f); } //从students文件读取信息并打印 void readFile(STU * pst,int n){ int i,j; FILE *f; if((f=fopen("students","rb"))==NULL){ printf("cannt opent file."); exit(0); } printf("-----------开始读取文件-----------------\n"); for(i=0;i<n;i++){ fread(pst+i,sizeof(STU),1,f); printf("%4d %5s %2s",(pst+i)->num,(pst+i)->name,(pst+i)->sex); for(j=0;j<SCORES;j++) printf(" %3.1f ",(pst+i)->score[j]); printf(" %4.1f ",(pst+i)->total); printf("\n"); } printf("-----------读取文件结束-----------------\n"); fclose(f); }
相关推荐
练习 16: 结构体和结构体指针 练习 17: 堆栈内存分配 练习 18: 指向函数的指针 练习 19: C面向对象的简单实现 练习 20: 非常好用的Debug宏 练习 21: 数据类型和流程控制进阶 练习 22: 栈,作用域,全局 练习 23: ...
二、结构体数组与结构体指针 三、结构体量的各种使用方式 四、共用体 五、枚举类型 六、typedef定义类型 第九部分:文件 一、概念 二、文件的打开与关闭 三、文件的操作 四、文件的定位与随机读写
纯手撕,如有问题欢迎指正: 思维导图解析: 从C语言初阶讲解到C语言进阶。...文件操作相关的知识: 23. C语言文件操作 应用: 24. C语言文件改造通讯录 最后: 25. C语言程序环境 26. C语言预处理
03数组练习;04二维数组;05字符数组和字符串;06字符串比较) 6.函数(01随机数;02函数定义使用;03函数类型;04函数值传递;05函数调用;06嵌套调用;07函数递归传递;08局部变量和全局变量) 7.编译预处理(01无...
最近在研究虚拟文件系统,VFS,已经能够搞的差不多了,但是有一个数据结构一直搞不定,结构体指针就每月有办法去很好的操作数据,很是无奈。 还是功力不够,需要再练习和学习。下面是国内某游戏的pak文件解压,其实...
这些案例涵盖了各种不同难度级别的问题,涉及基本语法、数组、函数、指针、结构体、文件操作等方面,适合初学者和有一定基础的程序员练习和学习。 每个案例都包含了详细的题目描述、示例代码和解题思路,帮助读者更...
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的...
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的...
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的...
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的...
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的...
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的...
(二)C语言基础 1...."文件包含"的处理。 6.指针:指针与指针变量的概念,指针与地址运算符;指针与数组、字符串和函数 的配合使用。 7.结构体:结构体数据的定义和使用;结构体数组的使用;利用指针
这份C语言基础教程提供了一份全面的C语言基础教程,覆盖了C语言的核心概念,包括语言简介、程序结构、数据类型、运算符、控制结构、函数、数组、指针、结构体与联合体、文件操作、预处理指令、宏定义、高级特性如变...
本书全面介绍了应用C语言进行开发的各种技术和技巧,全书共分12章,内容包括基础知识、指针、数据结构、算法、数学应用、文件操作、库函数应用、图形图像、系统调用、加解密与安全性、游戏、综合应用等。全书共提供...
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的...
目录: 第1章 5个例子 1 ...9.4.4 文件和操作系统相关的包 339 9.4.5 图像处理相关的包 341 9.4.6 数学处理包 341 9.4.7 其他一些包 341 9.4.8 网络包 342 9.4.9 反射包 343 9.5 练习 346
这些案例涵盖了各种不同难度级别的问题,涉及基本语法、数组、函数、指针、结构体、文件操作等方面,适合初学者和有一定基础的程序员练习和学习。 每个案例都包含了详细的题目描述、示例代码和解题思路,帮助读者更...
9.4.4 文件和操作系统相关的包 339 9.4.5 图像处理相关的包 341 9.4.6 数学处理包 341 9.4.7 其他一些包 341 9.4.8 网络包 342 9.4.9 反射包 343 9.5 练习 346 附录A 后记 348 附录B 软件专利的...
(49)File文件的数据输出操作 (50)File文件的数据输入操作 (51)判断文件结束函数 (52)fscanf和fprintf函数 (53)fgets和fputs函数 (54)fread和fwrite函数 (55)文件定位函数 c switch的用法 c 避免调试窗口闪退 c 弹出...