• 締切済み

ファイルの入力、出力

#include<stdio.h> int main(){ int a,b; FILE *fp0, *fp1;   fp0 = fopen("test1.dat", "r"); if( fp0 == NULL ){ printf("Cannot open test1.dat"); exit(1); } fp1 = fopen("file.txt", "w"); while((fscanf(fp0, "%d %d", &a,&b)) != EOF){ fprintf(fp1, "%d %d\n", a*a,b*b); } fclose(fp0); fclose(fp1); return(0); } test1.datファイルを読み込んで、変数a,bに値をいれ、 その二乗結果をfile.txtに書き込むプログラムなのですが test1.datファイルに書き込まれてる値をどのようにa,bに代入されているのかわかりません。 例えば test1.datが 1 2 3 4 5 であると、 file.txtには 1 4 9 16 25 16 と書き込まれています。 test1.datが 1 1 2 2 3 3 であると file.txtには 1 1 4 4 9 9 となっています。 どのように、変数に値が入るのでしょうか??

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>また、ファイルの読み込みと書き込みが両方ある場合、 >最初のFILE *fpというのは2個つくらなければいけないのでしょうか? 絶対に2個なければならない、というわけではありません。 例えば、 FILE *fp; fp = fopen(ファイル1、"r"); /* 何かの処理 */ fclose(fp); fp = fopen(ファイル2, "w"); /* 何かの処理 */ fclose(fp); のようにすれば、1個のファイルポインターを読込みと書込みで 使い回すことができます。 まあ、あまりおすすめはできない方法ですけれど。

inbizarain
質問者

お礼

返信ありがとうございます。 了解しました。 2個作るよう心がけます。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

ソースの while((fscanf(fp0, "%d %d", &a,&b)) は、2つずつ読んで、それぞれの値をaとbに入れる。 なので、 >1 2 3 4 5 であると、 ならば、 1回目:a=1、b=2 2回目:a=3、b=4 となる。 3回目は奇数なので、ここは環境依存になるけど一つはデータが読み込めているので、読み込めない部分は前回のbの内容を保持しているので 3回目:a=5、b=4 となる。 >fprintf(fp1, "%d %d\n", a*a,b*b); は、aとbをそれぞれ自乗して書き出しているだけ。 ちなみにこのプログラムなら、 >どのように、変数に値が入るのでしょうか?? fprintf()の前の行にprinf()を入れて変数の内容表示するだけですよ。

inbizarain
質問者

お礼

返信ありがとうございます。 つまり、行を横に見て順番にいれていき 1行目が終わったら2行目にいき、変数に読み込まれると考えてよいでしょうか? また、ファイルの読み込みと書き込みが両方ある場合、 最初のFILE *fpというのは2個つくらなければいけないのでしょうか? 初歩的すぎる質問ですみません。

関連するQ&A