#これを実行するとR10_outがすべてゼロになってしまいます。どうしてでしょうか。
#include <stdio.h>
#include <stdlib.h> //for exit();
#include <string.h>
typedef struct {
int ID[15];
char name[15][25];
double height[15];
double weight[15];
double bmi[15];
}Prog2;
#define N 15
//関数のプロトタイプ宣言
int load_data(Prog2 obj);
int write_data(Prog2 obj);
void calc_bmi(Prog2 obj);
void sort_data(Prog2 obj);
int main(void){
Prog2 stdt1={0};
load_data(stdt1); //ファイルからデータの読み込み
calc_bmi(stdt1); //BMIの計算
sort_data(stdt1);//BMIの降順に配列要素の並び替え
write_data(stdt1);//データをファイルに出力
return 0;
}
//データのファイルからの読み込み
int load_data(Prog2 obj)
{
FILE *fp; //ファイルポインタ
int i; //カウンタ
//入力ファイルのオープン(読み込みモード)
fp=fopen("R10_in.txt","r");
if(fp==NULL){
printf("Can't open 10_in.txt!\n");
exit(1);
}
//入力ファイルからデータの読み込み
printf("%-8s%-12s%12s%12s\n","ID",
"NAME","HEIGHT[cm]","WEIGHT[kg]");
i=0;
while(fscanf(fp,"%d %s %lf %lf", &obj.ID[i], obj.name[i], &obj.height[i],
&obj.weight[i])!=EOF){
//読み込んだデータ(ID, 名前,身長,体重)の画面出力
printf("%-8d%-12s%12.1f%12.1f\n", obj.ID[i],obj.name[i],obj.height[i],
obj.weight[i]);
i++;
}
fclose(fp); //入力ファイルのクローズ
return 0;
}
//データのファイルへの書き込み
int write_data(Prog2 obj)
{
FILE *fp; //ファイルポインタ
int i; //カウンタ
//出力ファイルのオープン(書き込みモード)
fp=fopen("R10_out.txt","w");
if(fp==NULL){
printf("Can't open R10_out.txt!\n");
exit(1);
}
//出力ファイルへのデータの書き込み
for(i=0;i<N;i++){
fprintf(fp,
"%-8d%-12s%10.1f%10.1f%10.1f\n",obj.ID[i],obj.name[i],obj.height[i],obj.weight[i],obj.bmi[i]);
}
fclose(fp); //入力ファイルのクローズ
return 0;
}
//肥満度の計算
void calc_bmi(Prog2 obj)
{
int i;
for(i=0;i<N;i++){
//BMI値の計算
obj.bmi[i]=obj.weight[i]/((obj.height[i]0.01)(obj.height[i]*0.01));
}
}
void sort_data(Prog2 obj)
{
int i,j, //カウンタ
ti; //ID用一時保存変数
double th,tw,to; //一時保存用変数
char wk[25]; //一時保存用配列
//肥満度の昇順に並び替え
for(i=0;i<N-1;i++){ /* i=0(最初のデータ)からi=N-2まで繰り返す /
for(j=i+1;j<N;j++){ / j=i+1からj=N-1(最後のデータ)まで繰り返す */
if(obj.bmi[i]<obj.bmi[j]){ //もしbmi[i]<bmi[j]なら
//ID[i]とID[j]の交換
ti=obj.ID[i];
obj.ID[i]=obj.ID[j];
obj.ID[j]=ti;
//height[i]とheight[j]の交換
th=obj.height[i];
obj.height[i]=obj.height[j];
obj.height[j]=th;
//weight[i]とweight[j]の交換
tw=obj.weight[i];
obj.weight[i]=obj.weight[j];
obj.weight[j]=tw;
//bmi[i]とbmi[j]の交換
to=obj.bmi[i];
obj.bmi[i]=obj.bmi[j];
obj.bmi[j]=to;
//name[i]とname[j]の交換
strcpy(wk,obj.name[i]);
strcpy(obj.name[i],obj.name[j]);
strcpy(obj.name[j],wk);
}
}
}
}
#R10_inについて
1001 Aoki 172.8 63.1
1002 Enomoto 167.5 68.9
1003 Fujita 182.6 69.3
1004 Hayashi 178.7 55.7
1005 Ishii 170.1 70.2
1006 Kawai 179.3 83.1
1007 Kubo 169.6 56.4
1008 Murakami 165.2 68.7
1009 Nakajima 187.6 61.0
1010 Nomura 172.0 71.5
1011 Okada 180.8 73.8
1012 Sakamoto 177.4 63.7
1013 Shibata 178.2 67.3
1014 Takeda 172.9 78.1
1015 Wada 170.7 65.4
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。