操作: 从文件g.txt读取数据,进行排序,输出分数第二高的学生
将排序后的数据输入到,创建一个新的txt,名字为e.txt
1.代码
#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>
typedef struct student
{
char number[20];
char name[20];
char sex[10];
char birth[20];
char province[20];
int score;
struct student *next;
}student;
void getSecond(student *s[],int sn);
void sort(student *s[],int sn);
int main()
{
//SetConsoleOutputCP(65001);
FILE* fd;
int flag = 0;
int sn = 10;//读取前面十个学生的信息
student * s[10];
//申请内存空间
for(;flag<sn;flag++)
{
s[flag] = (student *) malloc(sizeof(student));
}
//打开文件
if((fd = fopen("E:\\g.txt","r"))==NULL)
{
printf("文件读取失败.\n");
Sleep(80000);
return 0;
}
printf("文件读取成功.\n");
SetConsoleOutputCP(65001);
//读取文件
for( flag = 0; flag < sn; flag++)
{
fscanf(fd,"%s%s%s%s%s%d",s[flag]->number,s[flag]->name,s[flag]->sex,
s[flag]->birth,s[flag]->province,&s[flag]->score);
printf("%s%16s%8s%16s%16s%8d\n",s[flag]->number,s[flag]->name,s[flag]->sex,
s[flag]->birth,s[flag]->province,s[flag]->score);
}
//关闭文件
fclose(fd);
//SetConsoleOutputCP(65001);
printf("\n");
printf("\n");
SetConsoleOutputCP(936);
printf("输出第二学生信息: ");
SetConsoleOutputCP(65001);
getSecond(s,sn);//输出成绩第二的学生信息
printf("\n");
printf("\n");
SetConsoleOutputCP(936);
printf("按照分数高低输出所有学生信息: ");
SetConsoleOutputCP(65001);
sort(s,sn);//按照分数高低输出所有学生信息
return 0;
}
void getSecond(student *s[],int sn)
{
//寻找次高分数的学生信息
int ranking = 1 ;
int i,j;
for(i = 0; i < sn; i++)
{
for(j = 0; j<sn; j++)
{
if(s[i]->score > s[j]->score) ranking++;
}
if(ranking == sn-1 ) break;//sn-1表示次高分数标志
else ranking = 1;
}
printf("\n");
printf("%s%16s%8s%16s%16s%8d\n",s[i]->number,s[i]->name,s[i]->sex,
s[i]->birth,s[i]->province,s[i]->score);
}
void sort(student *s[],int sn)
{
student * temp;
int i=0,j=0;
for( ;i<sn-1; i++)
{
for(j = i; j<sn; j++)
{
if(s[i]->score < s[j]->score)
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
printf("\n");
//888888888888888888
FILE* fp1;
if((fp1=fopen("E:\\e.txt","w"))==NULL)
{
printf("File open erroe!\n");
exit(0);
}
//888888888888888888
//输出所有排序后学生的信息
for(i=0;i<sn;i++)
{
printf("%s%16s%8s%16s%16s%8d\n",s[i]->number,s[i]->name,s[i]->sex,
s[i]->birth,s[i]->province,s[i]->score);
}
//888888888888888888888888888
//输出所有排序后学生的信息
for(i=0;i<sn;i++)
{
fprintf(fp1,"%s%16s%8s%16s%16s%8d\n",s[i]->number,s[i]->name,s[i]->sex,
s[i]->birth,s[i]->province,s[i]->score);
}
if(fclose(fp1))
{
printf("Cant not close the file! \n");
exit(0);
}
Sleep(10000000);
//888888888888888888888888888
}
2.运行截图
操作: 从文件g.txt读取数据,进行排序,输出分数第二高的学生
将排序后的数据输入到,创建一个新的txt,名字为e.txt