• ベストアンサー

ファイルを読み込むプログラムについて

下のプログラムで分からない所がありますので、教えて頂ければと思います。宜しくお願い致します。 text = fgets(buf,256,fp);はfpのファイルから一行を読み込んでbufに格納するという処理ということは分かります。でも、while文内なので次にこの処理をする時に今度は、2行目(下の段)を読み込むはずですが、プログラム中のどこに2行目に移動させる処理があるのか分かりません。 予想ですが、text = fgets(buf,256,fp);の中にそのような意味の処理が含まれているのでしょうか? どなたかご教授お願い致します。 #include <stdio.h> int main(void) { FILE *fp; char buf[256]; char *text; char flname[256]; printf("ファイル名:"); gets(flname); fp = fopen(flname,"r"); do{ text = fgets(buf,256,fp); if(text != NULL){ printf("%s",text); } }while(text != NULL); fclose(fp); return(0); }

質問者が選んだベストアンサー

  • ベストアンサー
  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.3

>予想ですが、text = fgets(buf,256,fp);の中にそのような意味の処理が含まれているのでしょうか? ほぼその通りですが、読みとり位置をコントロールしているのはFILEポインタfpです。実際にはもう少し複雑ですが簡略化して説明します。 fgetsでは、FILEポインタfpから、指定文字数を読み、bufに格納します。格納後、fpには次の読みとり開始位置が入りますから、もう一度、fgets(buf,256,fp);が呼ばれると読み終わった次の位置から読み込まれるわけです。 なお、fgetsは、改行、ファイルの最後を見つけると文字数に達していなくてもそこで読みとりをやめます、この時、fpは改行の次の位置に移動するので、二行目が読めるわけです。 ですから text = fgets(buf,256,fp); text = fgets(buf,256,fp); text = fgets(buf,256,fp); のように三回呼べば三行進みます。

fujiwara222
質問者

お礼

回答有難うございます。 おかげで疑問が解決しました。

その他の回答 (2)

  • mogu23
  • ベストアンサー率33% (4/12)
回答No.2

下記アドレスを読むと少し分かるのではないかと…。 ちなみに、処理を移動させるという記述は }while(text!=NULL); というところだと思います。 私もまだ初心者なので詳しく説明はできませんが…

参考URL:
http://www.bohyoh.com/CandCPP/C/Library/fgets.html
fujiwara222
質問者

お礼

回答有難うございます。

  • danner
  • ベストアンサー率72% (8/11)
回答No.1

Dannerです。 > 予想ですが、text = fgets(buf,256,fp);の中にそのような意味の処理が含まれているのでしょうか? はい、その通りです。

fujiwara222
質問者

お礼

回答有難うございます。

関連するQ&A