1

cin.get( input, c )where cis 区切り文字を使用するコードがあります。エスケープとして使用される別の文字 e があるため、まれに失敗します。したがって、 e の後に続く場合は、エスケープされた ではなく、次の に行きcたいと思います。cin.getcc

現在、最後の文字cin.getが e であるかどうかを確認しており、そうであれば、別のcin.get. エスケープ文字を追加して、エスケープ文字cin.getの追加チェックを不要にする方法はありますか?

4

1 に答える 1

3

このような動作が必要な場合は、自分で実装する必要があります。には組み込まれていませんcin.get

少なくとも理論的には、iostreams ライブラリは、この種のロジックをプラグインするのに合理的な場所を提供するため、ストリームの一部のように機能します。具体的には、iostream には関連付けられたlocaleがあり、ロケールのcodecvtファセットを使用して、ファイル内の文字の外部表現から、プログラムで表示される文字の内部表現に変換します。この変換は、カスタムファセットで行うことができます。codecvt

codecvtただし、これにはかなり重大な問題があります。ファセットを記述するのはかなり苦痛です。読み取り後にジョブを実行するのではなく、この変換を codecvt ファセットとして記述しようとすると、コードの量が約 2 倍になり、関連する難易度が少なくとも 3 倍になります。

その投資報われる可能性があります。変換をファセットにパッケージ化すると、codecvt複数のプログラムへの統合がいくらか容易になります。この特定の変換を多くのプログラムで使用することを本当に期待している場合は、それをファセットにパッケージ化することが理にかなっている可能性があります。(私が推測するように) 他のプログラムでそれを使用する可能性が低い場合は、おそらく苦労する価値はありません。

于 2013-05-21T14:34:13.647 に答える