C++ではfflush(stdin)が本当に必要ですか?この方法でバッファ内の改行をフラッシュするのは良いことですか?fflush(stdin)の代替品ですか?
答えて
fflush(stdin)
への呼び出しは、Cでは(したがって、C++では)未定義の動作です。
C言語の標準、ISO 9899:7.19.5.2/2
1999年の状態出力ストリームまたは最新の 操作が入力されなかった更新ストリームへストリームポイントであれば、 fflush関数は、そのストリームの書き込みされていないデータをファイルに書き込むためにホスト環境に配信します( )。動作はC++で、行の次の終了までの全体の入力を廃棄するに 未定義
ありそうでない、最も堅牢なアプローチが点滅し、離れて行く」プログラムについては
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
です"、おそらくWindowsプラットフォームでコンソールアプリケーションを実行していますか?このようなアプリケーションは、コンソールウィンドウ(Start-> run-> cmd.exe)から実行することをお勧めします。
コードの末尾にあるgetchar()
は、stdin(入力バッファ)の次の文字を取得します。そこに文字がない場合、ユーザーが何かを入力するまで待機します。 fflush(stdin)は入力バッファをクリアします。
入力バッファをクリアしているため、getcharがユーザーの次の入力を待つため、fflushがあるとコードが待機するのはこのためです。しかし、あなたがバッファに何かを残しているように見えるので、getcharはプログラムを終了させます。
終了後にプログラムを開いたままにしておきたい場合は、そこから退出してください。すぐに終了したい場合は、フラッシュを外してください。
getchar()
の代わりにcin.get()
を使用してください。問題は、C++のI/OストリームとCのI/O関数が同じファイル記述子の上で動作しているが、バッファが異なることです。私は正確に何がデバッグなしで起こっているのかはわかりませんが、文字が入力されるまでプログラムを一時停止するよう呼びかけているgetchar()
のように感じています。したがって、データを取得してブロックを解除するので、プログラムを終了します。
まだ問題がある場合は、「\ n」文字を入力しないでください(Enterを押さないでください)。入力後にEnterキーを押すのは、実際にあなたが読むことができる文字です。この問題は通常、覗き見で解消されます(http://www.cplusplus.com/reference/iostream/istream/peek/参照)。
- 1. Scipyのfsolveの代替品ですか?
- 2. iPhoneのMPMoviePlayerControllerの代替品ですか?
- 3. Hazelcastのオープンソースの代替品ですか?
- 4. NAnt代替品
- 5. 代替品
- 6. シャープアーキテクチャー代替品
- 7. JqueryUIの代替品ですか?
- 8. MEF:PRISMの代替品ですか?
- 9. SAS DI LAG1の代替品ですか?
- 10. バックグラウンドサイズの代替品ですか?
- 11. Starclusterの代替品ですか?
- 12. イオン展開の代替品ですか?
- 13. 960.gsグリッドシステムの代替品ですか?
- 14. バグハントの代替品ですか?
- 15. IntelliJ IDEAのMylyn代替品ですか?
- 16. BufferedOutputStreamの代替品ですか?
- 17. fancyboxの代替品ですか?
- 18. reCAPCTHAの代替品ですか?
- 19. Cローレベルプログラミングの代替品ですか?
- 20. Flashの代替品ですか?
- 21. WiXの代替品ですか?
- 22. libQGLViewerの代替品ですか?
- 23. DataGridはUWPの代替品ですか?
- 24. CSLA.NETの代替品ですか?
- 25. Dreamweaverの代替品ですか?
- 26. Flash Builder Burritoの代替品ですか?
- 27. window.scrollMaxYの代替品ですか?
- 28. SRSPlusの代替品ですか?
- 29. Microsoft Index Serverの代替品ですか?
- 30. CKANの代替品
入力ストリームには決してfflushを呼び出さないでください。また、CとC++ I/Oを混在させないでください。 –