現在、C言語勉強中の者です。
C言語の市販の参考書(明解・C言語入門編)を買いほぼ独学で進めていたのですが、構造体のソートで行き詰ってしまいました。
下記のプログラムを、
「身長順でソートするか名前の昇順でソートするかを選べるようにする」問題です。
int型のソートは理解できたのですが、文字列のソートが上手くいきません。
#include <stdio.h>
#include <string.h>
#define NUMBER 5
#define NAME_LEN 64
typedef struct{
char name[NAME_LEN] ;
int height ;/*名前*/
float weight ;/*身長*/
long schols ;/*奨学金*/
} Student ;
/*xおよびyが指す学生を交換*/
void swap_Student(Student *x, Student *y)
{
Student temp =*x;
*x = *y ;
*y = temp ;
}
void sort_by_height(Student a[], int n)
{
int i, j ;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
if(a[j-1].height > a[j].height)
swap_Student(&a[j-1],&a[j]) ;
}
}
int main (void)
{
int i;
Student std[]={
{"Sato", 178, 61.2, 80000},
{"Sanaka", 175, 62.5, 73000},
{"Takao", 173, 86.2, 0},
{"Mike", 165, 72.3, 70000},
{"Masaaki",179, 77.5, 70000},
};
for(i=0;i<NUMBER;i++)
printf("%-8s %6d%6.1f%7ld\n",
std[i].name, std[i].height,std[i].weight,std[i].schols);
sort_by_height(std,NUMBER) ;
printf("\n身長順にソートしました\n");
for(i=0;i<NUMBER;i++)
printf("%-8s %6d%6.1f%7ld\n",
std[i].name, std[i].height,std[i].weight,std[i].schols);
return 0 ;
}
色々な方のやり方も学びたいので、コメント等で解説して頂けるとありがたいです。
どなたかお願い致します。