- 締切済み
ファイルの入力、出力
#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 となっています。 どのように、変数に値が入るのでしょうか??
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6289)
>また、ファイルの読み込みと書き込みが両方ある場合、 >最初のFILE *fpというのは2個つくらなければいけないのでしょうか? 絶対に2個なければならない、というわけではありません。 例えば、 FILE *fp; fp = fopen(ファイル1、"r"); /* 何かの処理 */ fclose(fp); fp = fopen(ファイル2, "w"); /* 何かの処理 */ fclose(fp); のようにすれば、1個のファイルポインターを読込みと書込みで 使い回すことができます。 まあ、あまりおすすめはできない方法ですけれど。
- arain
- ベストアンサー率27% (292/1049)
ソースの 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()を入れて変数の内容表示するだけですよ。
お礼
返信ありがとうございます。 つまり、行を横に見て順番にいれていき 1行目が終わったら2行目にいき、変数に読み込まれると考えてよいでしょうか? また、ファイルの読み込みと書き込みが両方ある場合、 最初のFILE *fpというのは2個つくらなければいけないのでしょうか? 初歩的すぎる質問ですみません。
お礼
返信ありがとうございます。 了解しました。 2個作るよう心がけます。