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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
A350

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

#1

投稿記事 by A350 » 9年前

ファイルを入力するプログラムを書いていますが、ファイルが上手く読み込まれません。
読み込むファイルはこちらです。
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;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

ソースコードを提示する際は、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で閉じないのは、あまりよくないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る