
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行目、・・・
と取り込むのかがわかりません。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
No.1を書いたものです。
参考ページのほうではその現在位置をファイルなどの頭に戻す
関数の解説が書かれています。
rewindという関数なのですが、今回はrewind(stream)というように
使えるはずです。
というのはfopenしたstream(おそらくFILE *streamなどと宣言しているでしょう)
に現在位置が記録されているんです。
なので、fgetsなどにファイルポインタstreamが必要なんです。
どこから読み出すのか知りたいですからね。
説明へたでわかりにくくて申し訳ありません。
参考URL:http://www.microsoft.com/japan/msdn/library/defa …
大変わかり易い説明ありがとうございました。
まさにファイルポインタはポインタなんですね。
今までは実感がなかったんですがファイルポインタの価値までわかってとてもすっきりしました。
使い方を理解しただけで理解しているような気になっているものが多いなと勉強不足を感じました。
また質問することもあると思いますが、見かけられましたら、ご教授ください。
No.3
- 回答日時:
電子ファイルでなく、マークシート(OMR)やOCRを考えると分かりやすいかも知れません。
カード読み取り機でカードを読み込むと、読み込み済みのものはどんどん排出されて行きます。入力口には、これから入力するもののみ残っています。
この読み込み動作を行わせる命令が、C言語の場合は、fgetsになります。
No.2
- 回答日時:
まずfgets(line,100,stream)というのは
ファイルポインタstreamの現在位置から改行文字までか
100文字分を受け取りlineにいれます。
100文字以上が1行に入っていると同じ行をつづけて読みます。
こういったように「どこまでは読んだ」という記録が残っていて
読み込みを繰り返すたびに位置がずれて、行数をずらしているものです。
あまり説明がうまくないのでわかりにくかったら申し訳ありません。
この回答への補足
一行ずつが強く残っていて、文字制限の事を失念してました。
なぜ続きから始まるのかは、ご説明で理解できたのですが、「どこまで読んだ」という記録はどこに保持されているのでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
DLLファイルの逆コンパイラにつ...
-
逆コンパイルと逆アセンブルの...
-
CSSが全く分かりません、お助け...
-
バッチファイルで以下のような...
-
gccを行ってもexeファイルが生...
-
プログラマー達は何故、プログ...
-
VisualStudio2022でC言語プログ...
-
Windows Formアプリからコンソ...
-
C# で 数式文字列処理を処理す...
-
C言語のことです。写真(見にく...
-
Cのプログラムからアクセスでき...
-
C#でTreeViewのCheckBoxのサイ...
-
次の日本語の意味を教えて下さい
-
c#のTLS1.2での通信について
-
visual studio 2022でのC#プロ...
-
C言語の関数のextern宣言
-
PIC12F1822でLED調光器を作りたい
-
最初に聞かれたこと
-
C言語 関数、変数の宣言について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# ファイルを読み込みlistvie...
-
ファイルサイズ
-
fgetsの処理を詳しく説明してく...
-
サーバにアップしたファイルを...
-
【ruby】zipファイルデータをST...
-
バッチ処理 特定の文字以降を...
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
【ExcelVBA】300万件越えCSVか...
-
Excelマクロ 空白セルを無視し...
-
Access VBA エラー2448について
-
VBA テキストボックスを選択状...
-
[コンパイルエラー 修飾子が不...
-
LibreOffice Calcのマクロで、...
-
ファイル名を変数で書きこむfwr...
-
シート内容の文字列を置換してV...
-
EXCEL→CSV保存時のダブルクォー...
-
バッチファイルでcsvファイルに...
-
パイソンでのファイルを見るには
-
Excel VBAでループ?続けて処理...
おすすめ情報