标题:使用c语言,实现数据的输入到文件,文件输出到数组中,同时对其进行排序
1,涉及到了fflush,刷新
2,对结构体中的某个变量进行排序
3.fprintf,fscanf,
Java版本:添加链接描述
参考视频:添加链接描述
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#define n 2
typedef struct Student{
char name[20];
int age;
double grade;
}S;
//排序
int cmp(const void * a,const void * b){
S s1 = *(S *)a;
S s2 = *(S *)b;
if(s1.grade > s2.grade){
return -1;
}else if(s1.grade < s2.grade){
return 1;
}
return 0;
}
//不用键盘的方式
int fun() {
S students[4] = {{"aaa",18,500},{"cc",18,550},{"bb",18,400},{"dd",18,390}};
//将数据--文件中
FILE * pf = fopen("aaa.txt","a"); //追加写 a 写,w
if(NULL == pf){
printf("%s",strerror(errno));
return 0;
}
for(int i = 0;i < 4;i++){
fprintf(pf,"%s %d %lf",students[i].name,students[i].age,students[i].grade);
}
//文件中 --存到数组中
pf = fopen("aaa.txt","r");
S dest[4] = {0};
for(int i = 0;i < 4;i++){
fscanf(pf,"%s %d %lf",dest[i].name,&dest[i].age,&dest[i].grade);
}
fclose(pf);
pf = NULL;
for(int i = 0;i < 4;i++){
printf("%s %d %lf\n",dest[i].name,dest[i].age,dest[i].grade);
}
//排序
qsort(dest,4,sizeof(S),cmp);
printf("排序后:\n");
for(int i = 0;i < 4;i++){
printf("%s %d %lf\n",dest[i].name,dest[i].age,dest[i].grade);
}
bool flag = false;
for(int i = 1;i < 4;i++){
if(dest[i].grade != dest[i-1].grade){
printf("%lf\n",dest[i].grade);
flag = true;
break;
}
}
if(!flag){
printf("没有第二大的值!!!");
}
return 0;
}
int main(){
//使用键盘的方式
S students[n] = {0};
//1,从键盘--变量
for(int i = 0;i < n;i++){
printf("请输入 %d 学生姓名,age,grade:\n",(i + 1));
fscanf(stdin,"%s %d %lf",students[i].name,&students[i].age,&students[i].grade);
}
//2,变量--文件
FILE * pf = fopen("aaa.txt","a"); //追加写 a 写,w
if(NULL == pf){
printf("%s",strerror(errno));
return 0;
}
for(int i = 0;i < n;i++){ //【最后面要空格,否则存入的数据就在一起,使得在一起的数据读出来有问题】
fprintf(pf,"%s %d %lf ",students[i].name,students[i].age,students[i].grade);
fflush(pf);//进行刷新
}
//文件中 --存到数组中
pf = fopen("aaa.txt","r");
S dest[n] = {0};
for(int i = 0;i < n;i++){
fscanf(pf,"%s %d %lf",dest[i].name,&dest[i].age,&dest[i].grade);
}
fclose(pf);
pf = NULL;
for(int i = 0;i < n;i++){
printf("%s %d %.2lf\n",dest[i].name,dest[i].age,dest[i].grade);
}
//排序
qsort(dest,n,sizeof(S),cmp);
printf("排序后:\n");
for(int i = 0;i < n;i++){
printf("%s %d %.2lf\n",dest[i].name,dest[i].age,dest[i].grade);
}
bool flag = false;
for(int i = 1;i < n;i++){
if(dest[i].grade != dest[i-1].grade){
printf("%0lf\n",dest[i].grade);
flag = true;
break;
}
}
if(!flag){
printf("没有第二大的值!!!");
}
return 0;
}