ページ 11

ファイルの読み込みについて

Posted: 2016年1月23日(土) 17:26
by A350
ファイルを入力するプログラムを書いていますが、ファイルが上手く読み込まれません。
読み込むファイルはこちらです。
Jane
1.72
55
Tom
1.76
72
Judy
1.76
67
Mary
1.80
78
Jhon
1.76
76
こちらが僕が書いたプログラムです
#include <stdio.h>
#include <stdlib.h>
#define NUM 5
int main (void)
{
int i;
char name[NUM][100];
double height[NUM];
int weight[NUM];
double BMI[NUM];


FILE *fp;
char file_name[] = "q.txt";

/* ファイルオープン */
if ((fp = fopen(file_name, "r")) == NULL) {
fprintf(stderr, "%s %lf %d\n", "error: can't read file.");
return EXIT_FAILURE;
}

for(i=0;i<NUM;i++){
fscanf(fp, "%s\n", name);
}
for(i=0;i<NUM;i++){
fscanf(fp, "%lf\n", &height);
}

for(i=0;i<NUM;i++) {
fscanf(fp, "%d\n", &weight);

}

for(i=0;i<NUM;i++){
printf("%s\n", name);
}
for(i=0;i<NUM;i++){
printf("%lf\n", &height);
}
for(i=0;i<NUM;i++){
printf("%d\n", &weight);
}



// BMI=(double)weight/(height*height);
/*for(i=0;i<NUM;i++){
printf("%s",name[i]);
if(BMI[i]>25&&30>=BMI[i]){
printf("%f 注意\n",BMI[i]);
}
else if(BMI[i]>30){
printf("%f 警告\n",BMI[i]);
}
else{
printf("%f\n",BMI[i]);
}
}*/

getchar();
getchar();
return 0;
}

Re: ファイルの読み込みについて

Posted: 2016年1月23日(土) 17:37
by みけCAT
ソースコードを提示する際は、BBCodeを有効にした(無効にしない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
A350 さんが書きました:ファイルが上手く読み込まれません。
読み込むファイルの形式に対して、読み込み処理の順番があっていないからですね。

コード:

	for(i=0;i<NUM;i++){
		fscanf(fp, "%s\n", name[i]);
	}
	for(i=0;i<NUM;i++){
		fscanf(fp, "%lf\n", &height[i]);
	}
		
	for(i=0;i<NUM;i++) {
	fscanf(fp, "%d\n", &weight[i]);
		
	}
の代わりに、

コード:

	for(i=0;i<NUM;i++){
		fscanf(fp, "%99s\n", name[i]);
		fscanf(fp, "%lf\n", &height[i]);
		fscanf(fp, "%d\n", &weight[i]);
	}
とすると改善するでしょう。
オフトピック
A350 さんが書きました:こちらが僕が書いたプログラムです
このプログラムは、fprintfに渡すデータが足りなかったり、printfに渡すデータの型が違ったりというundefined behaviorを含みますね。
また、fopenで開いたファイルをfcloseで閉じないのは、あまりよくないでしょう。