定义结构体变量成绩为char,数据排序的时候,要怎么赋值呀
gets函数是自己定义的获取文本数据数量的函数~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
typedef struct Student{
char sno[10];//学号
char name[20];//姓名
char sex[10];//性别
char phone[15];//电话
char grade[5];//成绩
}Student;
void Sort()
{
int i,j, num;
char *e;
Student * stus = NULL;
char str[MAX];
FILE* fp = fopen("c:\\StuInfo.txt", "r");
char *delim = ",";//数据之间用逗号作为分隔符
char *p;
printf("\n------数据排序------\n");
num = Gets();
stus = (Student *)malloc(num*sizeof(Student));
i=0;
while(fgets(str, MAX, fp) !=NULL)
{
p = strtok(str, delim);
strcpy(stus[i].sno, p);
p = strtok(NULL, delim);
strcpy(stus[i].name, p);
p = strtok(NULL, delim);
strcpy(stus[i].sex, p);
p = strtok(NULL, delim);
strcpy(stus[i].phone, p);
p = strtok(NULL, delim);
strcpy(stus[i].grade, p);
//p[strlen(p)-1] = '\0';
//stus[i].grade = atoi(p);
i++;
}
//关闭原文件
fclose(fp);
for(i=0;i<num;i++)
{
for(j=0;j<num;j++)
{
if(strcmp(stus[j].grade,stus[j+1].grade)>0)//字符串比较:>0表示前面的字符串比后面的大则交换
{
strcpy(e, stus[j].grade);
strcpy(stus[j].grade, stus[j+1].grade);
strcpy(stus[j+1].grade, e);
}
}
}
printf("学号\t姓名\t性别\t电话\t\t成绩\n");
for(i=0; i<num; i++)
{
printf("%s\t%s\t%s\t%s\t%s\n", stus[i].sno, stus[i].name, stus[i].sex,
stus[i].phone, stus[i].grade);
}
//输出到文本
fp = fopen("g:\\排序结果.txt", "w");
for(i=0; i<num; i++)
{
//输出到文件
fprintf(fp, "%s,%s,%s,%s,%s\n", stus[i].sno, stus[i].name, stus[i].sex,
stus[i].phone, stus[i].grade);
}
printf("文件已成功保存\n");
fclose(fp);
free(stus);
}
gets函数是自己定义的获取文本数据数量的函数~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
typedef struct Student{
char sno[10];//学号
char name[20];//姓名
char sex[10];//性别
char phone[15];//电话
char grade[5];//成绩
}Student;
void Sort()
{
int i,j, num;
char *e;
Student * stus = NULL;
char str[MAX];
FILE* fp = fopen("c:\\StuInfo.txt", "r");
char *delim = ",";//数据之间用逗号作为分隔符
char *p;
printf("\n------数据排序------\n");
num = Gets();
stus = (Student *)malloc(num*sizeof(Student));
i=0;
while(fgets(str, MAX, fp) !=NULL)
{
p = strtok(str, delim);
strcpy(stus[i].sno, p);
p = strtok(NULL, delim);
strcpy(stus[i].name, p);
p = strtok(NULL, delim);
strcpy(stus[i].sex, p);
p = strtok(NULL, delim);
strcpy(stus[i].phone, p);
p = strtok(NULL, delim);
strcpy(stus[i].grade, p);
//p[strlen(p)-1] = '\0';
//stus[i].grade = atoi(p);
i++;
}
//关闭原文件
fclose(fp);
for(i=0;i<num;i++)
{
for(j=0;j<num;j++)
{
if(strcmp(stus[j].grade,stus[j+1].grade)>0)//字符串比较:>0表示前面的字符串比后面的大则交换
{
strcpy(e, stus[j].grade);
strcpy(stus[j].grade, stus[j+1].grade);
strcpy(stus[j+1].grade, e);
}
}
}
printf("学号\t姓名\t性别\t电话\t\t成绩\n");
for(i=0; i<num; i++)
{
printf("%s\t%s\t%s\t%s\t%s\n", stus[i].sno, stus[i].name, stus[i].sex,
stus[i].phone, stus[i].grade);
}
//输出到文本
fp = fopen("g:\\排序结果.txt", "w");
for(i=0; i<num; i++)
{
//输出到文件
fprintf(fp, "%s,%s,%s,%s,%s\n", stus[i].sno, stus[i].name, stus[i].sex,
stus[i].phone, stus[i].grade);
}
printf("文件已成功保存\n");
fclose(fp);
free(stus);
}