rewind()の使い方がいまいちわかりません。参考書によるとrewind(stdin)と書かれているのですが、ファイルの先頭に戻るとはどういうことでしょうか?・・・
簡単なコードで説明してもらえると分りやすいのですが、いかがでしょうか?
余談ですがここに分りやすくcodeを張り付ける方法がよくわかりません。教えてもらえるとありがたいです。codeと/codeで囲むとはどういうことでしょうか?・・・
rewind()の使い方について
Re: rewind()の使い方について
推測ですけど、その昔、磁気テープ(古っ!)を使ってデータの読み書きをしていた時代がありました。akasan さんが書きました:rewind()の使い方がいまいちわかりません。参考書によるとrewind(stdin)と書かれているのですが、ファイルの先頭に戻るとはどういうことでしょうか?・・・
汎用コンピューターでは今も現役なのかな。
さておき、rewindというのは「磁気テープを巻き戻して」先頭に戻るところから来ているようです。
カセットデッキ(これも古っ)にセットしたカセットテープを、巻き戻しボタンで先頭に戻すことをイメージしてみるとよいかもしれません。
rewind(stdin)は、標準入力から読んだ内容をいったんチャラにして、初めから読み直す、くらいの感じでしょうか。
ここを見てもわかりませんか?akasan さんが書きました: 余談ですがここに分りやすくcodeを張り付ける方法がよくわかりません。教えてもらえるとありがたいです。codeと/codeで囲むとはどういうことでしょうか?・・・
http://dixq.net/board/board.html#k10
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: rewind()の使い方について
なんとなくイメージがつきました。rewind(stdin);がきたところで、標準入力から読んだ内容をチャラにするということですね。後はいろいろ試してみてイメージをよりつかんでいくことにします。ありがとうございました。
実験としてコードを入力します。
実験としてコードを入力します。
Re: rewind()の使い方について
まず,rewind(stream)と(void)fseek(stream, 0L, SEEK_SET)は,エラーなどの処理を除き,同等の効果です。akasan さんが書きました:rewind(stdin);がきたところで、標準入力から読んだ内容をチャラにするということですね。
そして,標準入出力に対してrewind/fseekできるのかどうかは,仕様書上の定義がありません。
rewind(stdin);について,仕様書通りに捉えるのであれば,標準入力ストリームの先頭にファイル位置表示子を移動させるだけなので,以降は今までの入力を再度読み込む,となります。
fseek(stdin, 0, SEEK_SET)は失敗し,rewindはその結果が受け取れないだけ,という可能性も十分にありえます。
なので,rewind(stdin)はそもそも使わないことをお薦めします。
# 自分で開いたストリームだけをrewind/fseekに渡す。