rewind()の使い方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
akasan

rewind()の使い方について

#1

投稿記事 by akasan » 7年前

rewind()の使い方がいまいちわかりません。参考書によるとrewind(stdin)と書かれているのですが、ファイルの先頭に戻るとはどういうことでしょうか?・・・

簡単なコードで説明してもらえると分りやすいのですが、いかがでしょうか?

余談ですがここに分りやすくcodeを張り付ける方法がよくわかりません。教えてもらえるとありがたいです。codeと/codeで囲むとはどういうことでしょうか?・・・

box
記事: 2002
登録日時: 13年前

Re: rewind()の使い方について

#2

投稿記事 by box » 7年前

akasan さんが書きました:rewind()の使い方がいまいちわかりません。参考書によるとrewind(stdin)と書かれているのですが、ファイルの先頭に戻るとはどういうことでしょうか?・・・
推測ですけど、その昔、磁気テープ(古っ!)を使ってデータの読み書きをしていた時代がありました。
汎用コンピューターでは今も現役なのかな。
さておき、rewindというのは「磁気テープを巻き戻して」先頭に戻るところから来ているようです。
カセットデッキ(これも古っ)にセットしたカセットテープを、巻き戻しボタンで先頭に戻すことをイメージしてみるとよいかもしれません。
rewind(stdin)は、標準入力から読んだ内容をいったんチャラにして、初めから読み直す、くらいの感じでしょうか。
akasan さんが書きました: 余談ですがここに分りやすくcodeを張り付ける方法がよくわかりません。教えてもらえるとありがたいです。codeと/codeで囲むとはどういうことでしょうか?・・・
ここを見てもわかりませんか?
http://dixq.net/board/board.html#k10
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

akasan

Re: rewind()の使い方について

#3

投稿記事 by akasan » 7年前

なんとなくイメージがつきました。rewind(stdin);がきたところで、標準入力から読んだ内容をチャラにするということですね。後はいろいろ試してみてイメージをよりつかんでいくことにします。ありがとうございました。

実験としてコードを入力します。

コード:

#include<stdio.h>

int main(void){
	int i;

	for(i=1;i<=100;i++){
		if(i%3==0&&i%5==0)
			printf("FizzBuzz\n");
		else if(i%3==0)
			printf("Fizz ");
		else if(i%5==0)
			printf("Buzz ");
		else
			printf("%2d ",i);
	}
}

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: rewind()の使い方について

#4

投稿記事 by YuO » 7年前

akasan さんが書きました:rewind(stdin);がきたところで、標準入力から読んだ内容をチャラにするということですね。
まず,rewind(stream)と(void)fseek(stream, 0L, SEEK_SET)は,エラーなどの処理を除き,同等の効果です。

そして,標準入出力に対してrewind/fseekできるのかどうかは,仕様書上の定義がありません。
rewind(stdin);について,仕様書通りに捉えるのであれば,標準入力ストリームの先頭にファイル位置表示子を移動させるだけなので,以降は今までの入力を再度読み込む,となります。
fseek(stdin, 0, SEEK_SET)は失敗し,rewindはその結果が受け取れないだけ,という可能性も十分にありえます。
なので,rewind(stdin)はそもそも使わないことをお薦めします。
# 自分で開いたストリームだけをrewind/fseekに渡す。

閉鎖

“C言語何でも質問掲示板” へ戻る