いつもお世話になっております。たいちうです。
質問はタイトルの通りで、テキストファイルの読み込みにgetcharを使いたかったので、
freopen(sample.txt, r, stdin)としたのですが、
読み込み後にキーボードの入力の為にstdinを戻すにはどうしたらよいのでしょうか。
戻すのが不可能なら、getcharを使わないで作ればよいのですが、
ご存じの方がいましたら教えて下さい。
【環境】Win98 + VC6.0SP5, コンソールプログラム
>読み込み後にキーボードの入力の為にstdinを戻すにはどうしたらよいのでしょうか。
たぶん、標準の機能では出来ないと思います。
標準からは外れますが、_fileno関数, _dup関数, _dup2関数を使えば可能です。
>戻すのが不可能なら、getcharを使わないで作ればよいのですが。
なぜ、getcharを使いたいのでしょう。標準入力をリダイレクトしたいのかな?
そうではなくて、単純に読み込むだけなら、fgetc関数を使えばよいと思います。
試してないけど
freopen(con, r, stdin)
でもだめかしら?
>freopen(con, r, stdin)
>でもだめかしら?
ああ、そうか!
コンソールデバイスをstdinに結びつけると。思いつかなかった(^^;
出来そうですね。
駄犬様
freopen(con, r, stdin)で、できました。ありがとうございます。
クラフトマン様
とりあえず解決しましたので、
_fileno関数, _dup関数, _dup2関数は、後の課題とさせてもらいます。
getcharを使うのは大した理由ではありません。
K&Rのサンプルをいじっていたんですが、
手を加える部分をできるだけ少なくして、ファイルに対応させたい。
↓
freopen(sample.txt, r, stdin) が使える。
↓
テキスト読み込みの後に、キーボードからの入力ができなくなってしまった。
(あたりまえや)
↓
元に戻せないだろうか?
という理由でした。
fopenで普通に読み込む方法は知っていましたが、
簡単にstdinを戻せないだろうか?と思って、
MSDNや過去ログを調べても解らなかったので質問させてもらいました。
ありがとうございました。