質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

3954閲覧

C:身長順にソートしたい

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/07/11 06:39

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

やりたい事

身長の高い順にソートしたい。

出来ている事

ファイルの読み込み表示、平均までを出す事が出来た。
でもソートの仕方が分からなくて困っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そもそも、ファイルからデータを読むところから作り直しましょう。これではダメです。

pdata key;

ローカル変数で pdataの変数をとって、そいつに繰り返し読み込んでいるだけなので、上書きされて最後の要素しか残ってません

投稿2018/07/11 06:46

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

他人のWebページで恐縮ですが、
https://webkaru.net/clang/array-sort-ascending-order/
とか
qsortを使用するとか
http://marycore.jp/prog/c-lang/c-function-qsort/

C言語 ソートでググるとたくさん出てきますよ

投稿2018/07/11 06:44

EKD

総合スコア161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問