【初月無料キャンペーン中】gooドクター

ファイルの入出力について勉強しているのですが、何度実行しても出力される物が文字化けしてしまいます。(身長と体重を読み込んで平均を出力します)
hw.txtはメモ帳で作成してドキュメントというフォルダに作成してあるのですがそれが間違いなのでしょうか?

#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
int i;
int ninzu=6;
char name[100];
double height,weight;
double hsum,wsum=0.0;
fp=fopen("hw.txt","r");
if(fp==NULL){
printf("ファイルオープンできない\n");
exit(1);
}
for(i=0;i<ninzu;i++){
fscanf(fp, "%s%lf%lf", name,&height,&weight);
hsum+=height;
wsum+=weight;
printf("%-10s %5.lf %5.lf\n", name, height, weight);
}
printf("--------------\n");
printf("平均 %5.lf %5.lf\n", hsum/ninzu, wsum/ninzu);
fclose(fp);
return 0;
}

gooドクター

A 回答 (5件)

hw.txtファイル内の構成は


名前、身長、体重が1名1行づつになってるのですよね?

以下の方法で1行づつ受け取り個別に処理した方が良いです
行が無くなるまで処理を続けます
char str[100];
while (fgets(str, 100, fp)!=NULL) {
hoge
}

解らなければ補足してください
    • good
    • 1
この回答へのお礼

親身に回答してくださりありがとうございます。
あれから回答なされた文章を見ながら参考書を見直して何とか理解できました。

お礼日時:2021/03/18 15:23

コマンドプロンプトの文字コードを変更なさったりすることお勧めします。


参考サイト
https://dianxnao.com/windows10のgccでutf8で作ったコードが文字化けする場合の対/
    • good
    • 0

あなたのいう「文字化け」とは, どういうことですか?



どういうもの (であるはずのもの) がどうなることを「文字化け」と表現しているのですか?

あ, 1個バグがある.
    • good
    • 1

文字化けの理由を記載してませんでしたね


大事なことを忘れてました

受け取り方と処理の仕方が悪いのです
ただファイルから文字列を受け取っただけではどこが改行なのかどこが最後の行なのかが解らないからです

そこで1行づうつ受け取りNULLになるまでそれを繰り返します
    • good
    • 0

暇だったので答え書いちゃいますね



#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
int i;
int ninzu=6;
char name[100];
double height,weight;
double hsum,wsum=0.0;
fp=fopen("hw.txt","r");
if(fp==NULL){
printf("ファイルオープンできない\n");
exit(1);
}

char str[100];
while (fgets(str, 100, fp)!=NULL) {
sscanf(str, "%s %lf %lf", name, &height, &weight);
hsum+=height;
wsum+=weight;
printf("%s", str);
}

printf("\n--------------\n");
printf("平均 %5.lf %5.lf\n", hsum/ninzu, wsum/ninzu);
fclose(fp);
return 0;
}

==================
hw.txtの中身
yamada 165 60
tanaka 170 70
suzuki 180 80
nonaka 175 65
satoda 160 55
yosida 190 80
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング