ファイルの入出力について

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ファイルの入出力について

Re: ファイルの入出力について

#3

by 潮汁 » 7年前

無事出力できました.。
詳しいご回答ありがとうございます。

Re: ファイルの入出力について

#2

by みけCAT » 7年前

float型がIEEE754 32ビット浮動小数点型の場合、有効桁数は10進数で7桁程度しかなく、丸めによる誤差が発生します。
改善するには、かわりにdouble型を使ってみてください。
double型のデータをfscanfで読み込むには、書式%lfが使えます。

ファイルの入出力について

#1

by 潮汁 » 7年前

ファイルの入出力について

二つのファイルを比較し計算するというプログラムを作ってるうえで、確認のためファイルの内容がそのまま書き出せているかどうかfprintf()で確かめていたところで起きた問題です。

二つのファイルを上から順に読み込み、一つのファイルに書き込むというプログラムを作成しました。
しかし、読み込んだファイル(kadai.txtとkadai2.txt)の数値と書き込んだファイル(result.txt)の内容が一致しません。
また、Ctrl+fでファイル内の検索を行っても一致した値がありません。

なぜ違う値が出力されるのでしょうか?

以下に実際の値の例を載せます。

[result.txt] [kadai.txt] [kadai2.txt]
4.99998998641968 4.99998998641968 4.99999009915671 4.99998990015611
4.99996089935303 4.99995994567871 4.99996078952758 4.99995999352302
4.99991226196289 4.99991035461426 4.99991206760234 4.99991027658406

コード:

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void) {
	FILE *f; // FILE型構造体
	FILE *h;
	FILE *result;
	int i = 1,n = 0;
	float x,y,data,data2;
		
	f = fopen("kadai.txt", "r"); // ファイルを開く。
	h = fopen("kadai2.txt", "r");
	result = fopen("result.txt","w");
	 
	while(fscanf(f,"%f",&data) != EOF		 
		  && fscanf(h,"%f",&data2) != EOF
		  ){

	  fprintf(result,"%0.14f %0.14f\n",data,data2);

}
	fclose(f); // ファイルを閉じる
	fclose(h);
	fclose(result);
	return 0;
}



ページトップ