C言語 ファイル処理に関する事
テキストエディタで打ち込んだファイル
【hw.dat】
Akiba 160 59.3
Kurata 162 51.6
Masaki 182 76.5
Tanaka 170 60.7
Tsuji 175 83.9
Washio 175 72.5
名前・身長・体重のデータです。
<問>
「hw.dat」から読み込んだデータを身長順にソートした上で
表示するプログラムを作成せよ。
下記のプログラムでは実行結果が何も出てきません。
入門レベルのスキルしかありません。何処が良くないのでしょうか。
教えて下さい。
[プログラム]
#include <stdio.h>
#include <string.h>
void swap_double(double *x, double *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void swap_name(char *sx, char *sy)
{
char *temp;
strcpy(temp, sx);
strcpy(sx, sy);
strcpy(sy, temp);
}
void sort(double *he, double *we, int n)
{
int i, j;
for(i = 0; i < n - 1; i++){
if(*(he - 1) > *he ){
swap_double((he - 1), he);
swap_double((we - 1), we);
}
}
}
void sort_name(double *he, char *na, int n)
{
int i, j;
for(i = 0; i < n - 1; i++){
if(*(he - 1) > *he ){
swap_name((na - 1), na);
}
}
}
int main(void)
{
FILE *fp;
int ninzu = 0;
char *name[100];
double height, weight;
double hsum = 0.0;
double wsum = 0.0;
int i;
char *na[i];
double he[6];
double we[6];
if ((fp = fopen("hw.dat", "r")) == NULL)
printf("\aファイルをオープンできません。\n");
else{
for(i = 0; i < 6; i++){
while (fscanf(fp, "%s%lf%lf", name , &height , &weight) != EOF ){
*na = *name;
he[i] = height;
we[i] = weight;
ninzu++;
hsum += he[i];
wsum += we[i];
printf("%-10s %5.1f %5.1f\n", na, height, weight);
}
}
printf("------------------------\n");
printf("平均 %5.1f %5.1f\n", hsum / ninzu, wsum / ninzu);
}
puts("\n身長順にソートしました。");
for(i = 0; i < 6; i++){
*na = *name;
he[i] = height;
we[i] = weight;
ninzu++;
hsum += he[i];
wsum += we[i];
}
for(i = 0; i < 6; i++){
sort(he, we, 6);
sort_name(he, *na, 6);
printf("%-10s %5.1f %5.1f\n", *(na + i) , *(he + i), *(we + i));
}
printf("------------------------\n");
printf("平均 %5.1f %5.1f\n", hsum / ninzu, wsum / ninzu);
fclose(fp);
return 0;
}
お礼
Time Managementこそ今の私に必要です。生きるためのスマートさを身に付けたいです。 ペットロスから回復しているので過去進行形ですね。 ”太る”、”やせる”にも、込めた気持ちによって色々言い方があるんですね。