数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

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

数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#1

投稿記事 by あいら » 16年前

#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <string.h>

int main(void)
{
FILE *fb = fopen("Number.bin", "wb"),*ft = fopen("Number.txt", "w") ;
int num = 12345;

if(fb != NULL){
fwrite(&num, sizeof(int), 1,fb);
}

fprintf(ft,"%d", num);
return(0);
}

となったのですがあってるのでしょうか?

御津凪

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#2

投稿記事 by 御津凪 » 16年前

この処理は、

数値をバイナリ形式とテキスト形式でそれぞれ別のファイルへ書き込む

をしています。
タイトルとなっている、

「書き込んだデータ」を「読み込んでテキストファイルへ書き込む」

をしていません。
(と、解釈しましたが合っていますか?)

あと、処理をした後の fclose と、
ファイルをオープンできなかった場合の処理( ft に対して)が抜けています。

あいら

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#3

投稿記事 by あいら » 16年前

御津凪さん返信ありがとうございます!

> 「書き込んだデータ」を「読み込んでテキストファイルへ書き込む」
> をしていません。
> (と、解釈しましたが合っていますか?)
→指摘の通り、合っています。
> あと、処理をした後の fclose と、
> ファイルをオープンできなかった場合の処理( ft に対して)が抜けています。

変数名少しわかりにくかったので修正しました。

#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <string.h>

int main(void)
{
FILE *sf = fopen("Number.bin", "wb"), *lf = fopen("Number.bin","rb"),*sf2 = fopen("Number.txt", "w") ;
int num = 12345;

if(sf != NULL){
fwrite(&num, sizeof(int), 1,sf);
}

if(lf !=NULL){
fread(&num, sizeof(int), 1,lf);
}

if(sf2 !=NULL){
fprintf(sf2,"%d", num);
}

fclose(sf);
fclose(lf);
fclose(sf2);

return(0);
}

こうなったのですが、いかがでしょうか?
どうかよろしくお願いします。

御津凪

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#4

投稿記事 by 御津凪 » 16年前

そのコードで実行してみましたか?
少なくともそれで正しく処理できたかどうかは分かるはずです。
(これでは正しく処理出来ませんが)

同じファイルをそれぞれ書き込みと読み込みで同時に開けません。

なのでこの場合は、

必要になった時にファイルを開き、
書き込み(または読み込み)、
閉じる。

この一連の処理をそれぞれしたほうが良いです。

初級者

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#5

投稿記事 by 初級者 » 16年前

>質問者さん

いかがでしょうか、と人にたずねる「前」に、
実行結果が正しいかどうかを
「自分で」確認すればよいと思います。
いかがでしょうか。

今後も、プログラムを修正するたびに
「いかがでしょうか」ですか?

自分の頭や手を使わないと、身につかないと思います。
いかがでしょうか。

あいら

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#6

投稿記事 by あいら » 16年前

御津凪さん返信ありがとうございます。
一応下記のように修正したのですが・・・
結果は同じでした・・・。
何度もすみません。


#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <string.h>

int main(void)
{
FILE *sf, *lf, *sf2;
int num = 12345;

sf = fopen("Number.bin", "wb");

if(sf != NULL){
fwrite(&num, sizeof(int), 1,sf);
}

fclose(sf);

lf = fopen("Number.bin","rb");

if(lf !=NULL){
fread(&num, sizeof(int), 1,lf);
}

fclose(lf);

sf2 = fopen("Number.txt", "w");

if(sf2 !=NULL){
fprintf(sf2,"%d", num);
}

fclose(sf2);

return(0);
}

御津凪

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#7

投稿記事 by 御津凪 » 16年前

> 一応下記のように修正したのですが・・・
> 結果は同じでした・・・。

「何」と「どう」比べて同じだったのでしょうか?
それでは何がおかしいのか分かりません。

処理の結果は最初の質問と同じ出力結果で、
タイトルにあった処理をしているはずです。

いかがでしょうか。

あいら

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#8

投稿記事 by あいら » 16年前

御津凪さんありがとうございます。
何度もすみません。

投稿したNo:25785の処理とNo:25792の処理で同一の結果が得られたのでおかしいのかなと思ってしまいました。

もうちょっと、勉強して出直してきます。
御津凪さん見たいに回答できるようにがんばりたいと思います。
長々とお付き合いいただきありがとうございました。

non

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#9

投稿記事 by non » 16年前

>投稿したNo:25785の処理とNo:25792の処理で同一の結果が得られたのでおかしいのかなと思ってしまいました。

確かにエラーは出ないようですね。
ファイルは正しいし、見かけ上は、うまくいったように見えます。
しかし、freadは正しく読まれていないはずです。データを別の変数に読んで出力してみたら
わかると思います。
または
printf("%d",fread(&num, sizeof(int), 1,lf));
に変更してみましょう。freadは成功したら、個数を返しますから1を返さなくてはいけません。

Dixq (管理人)

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#10

投稿記事 by Dixq (管理人) » 16年前

>あいらさん

こんにちは。宿題でしょうか?お疲れ様ですm(_ _)m
遅くなりました、もう解決済みでしたかね。
もし腑に落ちないことがあれば遠慮なく聞いて下さいね。
何故ここがこうなるのかとか、ココはこれでいいのかとか。

>nonさん

こんな感じになりましたが、freadは正しく実行されていないのでしょうか?
#include <stdio.h> 
#include <string.h> 

int main(void) {
	FILE *sf, *lf, *sf2;
	int num = 12345, num2;

	sf = fopen("Number.bin", "wb"); 

	if(sf != NULL){ 
		fwrite(&num, sizeof(int), 1,sf); 
	} 

	fclose(sf); 

	lf = fopen("Number.bin","rb"); 

	if(lf !=NULL){ 
		printf("%d\n",fread(&num2, sizeof(int), 1,lf)); 
		printf("%d\n", num2); 
	} 

	fclose(lf); 

	return(0); 
} 

実行結果

1
12345

初級者

Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む

#11

投稿記事 by 初級者 » 16年前

1個の値を読み取り、
その内容が12345、
という結果を得ています。
何ら問題ありません。

閉鎖

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