c
1#include<stdio.h> 2 3typedef struct Person{ 4 char name[100]; 5 double height; 6 double weight; 7}pdata; 8 9void swap(pdata* x, pdata* y) 10 11{ 12 13 pdata tmp = *x; 14 15 *x = *y; 16 17 *y = tmp; 18 19} 20 21void sort(pdata data[], int n) 22 23{ 24 25 int k = n - 1; 26 27 while (k >= 0) 28 29 { 30 31 int i, j; 32 33 for (i = 1, j = -1; i <= k; i++) 34 35 { 36 37 if (data[i - 1].height > data[i].height) 38 39 { 40 41 j = i - 1; 42 43 swap(&data[i], &data[j]); 44 45 } 46 47 } 48 49 k = j; 50 51 } 52 53} 54 55int main(void) 56{ 57 FILE *fp; 58 59 pdata key; 60 char name[20]; 61 int ninzu = 0; 62 double hsum = 0.0; 63 double wsum = 0.0; 64 65 printf("ファイル名: "); 66 scanf("%s", name); 67 68 69 70 71 72 fp = fopen(name ,"r"); 73 if(fp == NULL){ 74 printf("ファイルをオープンできません。\n"); 75 }else{ 76 //printf("ファイルをオープンしました。\n"); 77 printf("--------------------\n"); 78 printf("No. 名前 身長 体重\n"); 79 80 //sort(); ←何を入れればいいか分からない 81 while (fscanf(fp, "%s%lf%lf",key.name, &key.height, &key.weight) ==3 ) { 82 printf("%-10s %5.1f %5.1f\n",key.name, key.height, key.weight); 83 ninzu++; 84 hsum += key.height; 85 wsum += key.weight; 86 } 87 printf("--------------------\n"); 88 printf("平均 %5.1f %5.1f\n", hsum / ninzu, wsum /ninzu); 89 90 fclose(fp); 91 } 92 return 0; 93}
下記のファイルをソートしたい。
ファイル名: sample.text
Aiba 160.0 59.3
Kurata 162.0 51.6
Masaki 182.0 76.5
Tanaka 170.0 60.7
Tsuji 175.0 83.9
Washio 175.0 72.5
やりたい事
身長の高い順にソートしたい。
出来ている事
ファイルの読み込み表示、平均までを出す事が出来た。
でもソートの仕方が分からなくて困っています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。