アプリ版:「スタンプのみでお礼する」機能のリリースについて

下のプログラムで分からない所がありますので、教えて頂ければと思います。宜しくお願い致します。

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);
}

A 回答 (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);

のように三回呼べば三行進みます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/25 19:40

下記アドレスを読むと少し分かるのではないかと…。


ちなみに、処理を移動させるという記述は
}while(text!=NULL);
というところだと思います。

私もまだ初心者なので詳しく説明はできませんが…

参考URL:http://www.bohyoh.com/CandCPP/C/Library/fgets.html
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2005/06/25 19:34

Dannerです。



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

はい、その通りです。
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2005/06/25 19:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!