重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

char line[100];
(stream = fopen( "test.c", "r" )) == NULL;
while( ( fgets( line, 100, stream ) != NULL)){
printf( "%s", line);
}
fclose( stream );

上記のコードでファイルが一行ずつ表示されるのですがなんとなくでfgetsを使っていたのでwhile文中のfgetsの動きがよく分かりません。
初めに改行文字までの一行を読み込むのはわかるのですが、何故繰り返すときlineに2行目、3行目、・・・
と取り込むのかがわかりません。
よろしくお願いします。

A 回答 (4件)

No.1を書いたものです。


参考ページのほうではその現在位置をファイルなどの頭に戻す
関数の解説が書かれています。
rewindという関数なのですが、今回はrewind(stream)というように
使えるはずです。
というのはfopenしたstream(おそらくFILE *streamなどと宣言しているでしょう)
に現在位置が記録されているんです。
なので、fgetsなどにファイルポインタstreamが必要なんです。
どこから読み出すのか知りたいですからね。
説明へたでわかりにくくて申し訳ありません。

参考URL:http://www.microsoft.com/japan/msdn/library/defa …
    • good
    • 0
この回答へのお礼

大変わかり易い説明ありがとうございました。
まさにファイルポインタはポインタなんですね。
今までは実感がなかったんですがファイルポインタの価値までわかってとてもすっきりしました。

使い方を理解しただけで理解しているような気になっているものが多いなと勉強不足を感じました。
また質問することもあると思いますが、見かけられましたら、ご教授ください。

お礼日時:2006/01/22 07:10

電子ファイルでなく、マークシート(OMR)やOCRを考えると分かりやすいかも知れません。



カード読み取り機でカードを読み込むと、読み込み済みのものはどんどん排出されて行きます。入力口には、これから入力するもののみ残っています。
この読み込み動作を行わせる命令が、C言語の場合は、fgetsになります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
実際に置き換えて考えると理解し易いんですね

お礼日時:2006/01/22 06:55

まずfgets(line,100,stream)というのは


ファイルポインタstreamの現在位置から改行文字までか
100文字分を受け取りlineにいれます。
100文字以上が1行に入っていると同じ行をつづけて読みます。
こういったように「どこまでは読んだ」という記録が残っていて
読み込みを繰り返すたびに位置がずれて、行数をずらしているものです。
あまり説明がうまくないのでわかりにくかったら申し訳ありません。

この回答への補足

一行ずつが強く残っていて、文字制限の事を失念してました。
なぜ続きから始まるのかは、ご説明で理解できたのですが、「どこまで読んだ」という記録はどこに保持されているのでしょう?

補足日時:2006/01/22 06:42
    • good
    • 0

前の続きから読み込むからです。

    • good
    • 0

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