問題タブ [istream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
8578 参照

c++ - 出力および入力用のファイル名に対する単純なユーザー要求

.outプログラムが読み取る必要があるファイル名を入力し、代わりに拡張子付きの名前を出力するようにユーザーに要求するにはどうすればよいですか?

例:

しかし、ファイルを元のドキュメント タイプ (IE:.txt) ではなく filename.out として保存する必要があります。

私はこれを試しました:

しかし、私はこれらのエラーが発生します:

c:\users\matt\documents\visual studio 2008\projects\dspi\dspi\dspi.cpp(41): エラー C2228: '.txt' の左側には class/struct/union が必要です 1> タイプは 'char [256 ]'

c:\users\matt\documents\visual studio 2008\projects\dspi\dspi\dspi.cpp(42): エラー C2228: '.out' の左側には class/struct/union が必要です 1> タイプは 'char [256 ]'

0 投票する
4 に答える
499 参照

c++ - C ++ istreamを「カーボンコピー」しますか?

私自身の小さなパーサー フレームワークのために、次の関数を定義しようとしています。

次に、次のようなものを書くことができます: (おそらく最良の例ではありません)

どんな助けでも大歓迎です。

0 投票する
4 に答える
2205 参照

c++ - "cin" と "File" の C++ 共通インターフェイス

cin とファイルの入力に共通のインターフェイスはありますか?

オプションパラメータを持つプログラムを作りたい

入力ファイルが指定されている場合はファイルから読み取り、指定されていない場合は cin から読み取る必要があります。

私が知る限り、どちらも実装していistreamます。のようなことができるようin >> varに、どのように設定しますか。inistream

0 投票する
2 に答える
125 参照

c++ - istream parse EVENT_TYPE(param1;param2; ...)

次のような文字列を解析するエレガントな方法を見つけようとしています。

EVENT_TYPE は多くの文字列定数の 1 つで、それぞれに 0 個以上のパラメーターがあります。これまでのところ、文字列「s」に EVENT_TYPE(param1;param2) が含まれている場合、次のように書くと思いました。

const string&を指定して、「これらの文字をスキップする」ように指示するとよいでしょう。そうではありません。あなたはこれについてどうしますか?:-)

アドバイスをありがとう!

0 投票する
4 に答える
3083 参照

c++ - std::istream::read の設計を理解する

std::istreamにはプロトタイプistream& read (char* s, streamsize n)があり、実際に読み取られるバイト数は を呼び出して取得する必要がistream::gcount()あり、 の有効性もistreamから知ることができますios::good

私が書こうとしていた別のストリームクラスの実装について同僚と話し合っていたとき、私はこの設計に従うかもしれないと言っていました。しかし、ユーザーに毎回gcountを呼び出させる代わりに、このようにプロトタイプを読み取って、1 回の呼び出しで解決できるようにすることもできistream& read (char* s, streamsize n, size_t &bytes_read)、前者は扱いにくいと彼は言いました。std私はのデザイン選択を弁護できませんでした。背後にある本当の理由は何istream::readですか?

0 投票する
2 に答える
411 参照

c++ - istream 経由でブロックされたスレッドを解放する方法

私は2つのクラスを作成しました。1 つは入力の読み取り (istream オブジェクトによる) と解析用で、もう 1 つはパーサーの出力の処理用です。
それぞれのインスタンスが 1 つあります。
istream::get() を呼び出すループでパーサーを実行し、入力に基づいて 2 番目のオブジェクトのコマンドを作成します。これらのコマンドは、2 番目のオブジェクトが別のスレッドで処理するキューに置かれます。
これで、最終的に「Quit」コマンドを送信できるようにする必要があることは明らかです。ただし、ここで問題が発生します。「Quit」コマンドは解析ループも終了する必要がありますが、istream::get() 内でキャッチされているため、終了する必要があることをパーサーに通知する方法が見つかりません。
そのメソッドからウェイクアップする方法が必要ですが、見つかりません...
istream::rdbuf() から ostream オブジェクトを作成することにより、istream オブジェクト (この場合は cin) にある種の「終了シーケンス」を書き込むことを考えました。しかし、それはうまくいきません - バッファへの書き込みを試みた後、badbit が設定されます。
StackOverflow の別の質問で、Boost ライブラリの asio クラスが言及されているのを見ましたが、サードパーティのライブラリには依存したくありません。
istream::get() からスレッドをウェイクアップする方法はありますか?つまり、プログラム内から istream バッファーに書き込む方法はありますか?
別のアプローチは、その特定の場所でクリーンアップが必要ないため、許容できるスレッドを強制終了することです。しかし、これはどのように行うことができますか?(私は POSIX スレッドの実装に依存しています)

0 投票する
1 に答える
773 参照

.net - Delphi IStream の初期化に相当する .NET

次の Delphi コードがあります。

実際に IStream オブジェクトを COM コンポーネントに渡します。.NET には「System.Runtime.InteropServices.ComTypes.IStream」インターフェイスがありますが、適切な使用方法がわかりません。IStream をデータで初期化し、それを .NET の COM オブジェクトに渡す方法は?

0 投票する
2 に答える
3130 参照

c++ - C++ istream を繰り返す

を解析または反復する最良の方法は何istreamですか? istreamを受け取り、それを解析してオブジェクトを作成する関数を作成する必要があるため、これを行う最も簡単な方法を考えていました。それを変換できるものでもstringダンディになります。

0 投票する
2 に答える
1692 参照

c++ - Stringsクラスの演算子>>をオーバーライドします

簡単な質問があります。カスタムStringクラスの演算子>>をオーバーライドする必要がありますが、その方法がわかりません。

このコードが機能することはわかっています。これは、問題を解決するための私の最初の方法だったからです。

ただし、仕様(これは宿題です)によると、空白を手動でチェックし、文字列がdata []に対して大きすぎないことを確認するために、一度に1文字ずつ読み取る必要があります。そこで、コードを次のように変更しました。

ただし、この新しいコードを実行すると、ユーザー入力のループに陥ります。では、is.get()を使用してデータを文字ごとに読み込むが、ユーザー入力が増えるのを待たないようにするにはどうすればよいですか?または、おそらく.get()以外のものを使用する必要がありますか?

0 投票する
5 に答える
4975 参照

c++ - `std::istreambuf_iterator`の使用法について混乱しています

<<ストリーム演算子を使用して、オブジェクトの逆シリアル化ルーチンを実装しました。ルーチン自体はistreambuf_iterator<char>、オブジェクトを構築するために、を使用してストリームから文字を1つずつ抽出します。

最終的に、私の目標は、を使用してストリームを反復処理し、istream_iterator<MyObject>各オブジェクトをに挿入できるようにすることvectorです。ストリームの終わりに達したときに反復istream_iterator停止するのに問題があることを除いて、かなり標準的です。今のところistream::tellg()、ファイルの最後にいることを示す呼び出しがあったとしても、それは永遠にループします。

問題を再現するためのコードは次のとおりです。

この些細な例では、istreambuf_iteratorも必要ないことはわかっていますが、問題を単純化しようとしているだけなので、人々が私の質問に答える可能性が高くなります。

したがって、ここでの問題はistreambuf_iterator、がストリームバッファの最後に到達しても、実際のストリーム自体が状態にならないことEOFです。ファイルの最後のバイトを返し、trueと比較しistream::eof()てもfalseを返すように呼び出します。これは、私が間違いなくストリームの最後にいることを意味します。istream::tellg()istreambuf_iterator<char>(ifs)istreambuf_iterator<char>()

istream_iteratorIOstreamsライブラリコードを調べて、が終了位置にあるかどうかを正確に判断する方法を確認しました。基本的には、にistream::operator void*() const評価されるかどうかを確認しtrueます。このistreamライブラリ関数は単に以下を返します。

0つまり、フェイルビットが設定されている場合は(false)を返します。次に、この値をのデフォルトで構築されたインスタンスの同じ値と比較istream_iteratorして、最後にいるかどうかを判断します。

そのため、比較が真と終了イテレータを比較std::istream& operator >> (std::istream& is, Foo& f)するときに、ルーチンでフェイルビットを手動で設定してみました。istreambuf_iteratorこれは完全に機能し、ループを適切に終了しました。しかし今、私は本当に混乱しています。「ストリームの終わり」の状態を示すために、istream_iterator 間違いなくチェックしているようです。std::ios::failbitしかし、それは何std::ios::eofbitのためではありませんか?failbitたとえば、の基になるファイルをfstream開くことができなかった場合など、エラー状態のためだと思いました。

では、なぜistream::setstate(std::ios::failbit)ループを終了させるために呼び出す必要があるのでしょうか。