問題タブ [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.
c++ - C++ で一定数の文字を読み取る
文字列が 20 文字以内で、C++ でスペースを含むことができる場合、文字列をどのように読み取るでしょうか? たとえば、次のようなファイルがあります。
できるだけ基本的な方法で書きたいと思います。そして、この場合は C++ のみを使用することをお勧めします (C のものは使用しません)。これは、std::string に格納することを意味します。
istream::getまたはistream::getlineを使用できますが、改行文字を避ける必要があります。これには問題があります (そして、私が書いているコードは初心者に見せる予定です)。
この問題の解決策は何ですか?
編集:
尋ねられたので、私が試したことをお話ししますが、うまくいくとは思いません。私は C++ の初心者ではなく、通常はistream::getや char 配列などを使用していましたが、改行文字を削除することは一部の人にとっては専門的すぎるように思えるかもしれません。
だから... istream::operator>>を使用してchar 配列またはstd::stringを読み取ると、スペース文字が表示されると読み取りが停止するため失敗します (いくつかの単語を読み取る必要がある場合があります)。これは、次のコードが失敗することを意味します。
また...
もう1つのことは、改行文字がシステムごとに異なり、実際にWindowsはデフォルトでそのうちの2つを使用することです。Windowsでistream::ignoreを引数として2で使用しようとしましたが、それが改行を無視する唯一の方法でした。これは、Windows が改行記号に 2 文字を使用するためであると結論付けました。つまり、Linux では動作せず、より複雑にする必要があります... 繰り返しになりますが、初心者には悪いことです。
c++ - charからistreamを取得します*
ライブラリから受け取ったchar*とデータ長があり、istreamを受け取る関数にデータを渡す必要があります。
文字列ストリームを作成できることはわかっていますが、それによってすべてのデータがコピーされます。また、データはzipファイルであるため、必ず0になります。文字列ストリームを作成すると、最初の0までデータが取得されると思います。
すべてのデータをコピーせずにchar*とそのサイズからistreamを作成する方法はありますか?
c++ - istream エラーに Null ターミネータを追加
文字列のコレクションをオブジェクトの配列に含むテキスト ファイルを読み込もうとしていますが、入力に問題があります。istream here に移動するエラーが表示されます
C++ で文字列を使用する方法についてはよくわからないので、助けていただければ幸いです。
私のコード:
c++ - 読み取りループでの失敗とファイルの終わりの区別
istreamから読み取る慣用的なループは
現在、このループには1つの問題があります。ファイルの終わりが原因でループが終了したのか、エラーが原因でループが終了したのかを区別できません。たとえば、次のテストプログラムを考えてみましょう。
への最初の呼び出しにtestread
は2つの有効なブールが含まれているため、エラーではありません。2番目の呼び出しは3番目の不完全なブール値で終了するため、エラーになります。それにもかかわらず、両方の動作は同じです。前者の場合、ブール値がないために読み取りに失敗し、後者の場合、不完全であるために失敗し、どちらの場合もEOFがヒットします。実際、上記のプログラムは同じ行を2回出力します。
この問題を解決するために、私は次の解決策を考えました。
アイデアは、実際に値を抽出しようとする前に、通常のEOFを検出することです。ファイルの最後に空白がある可能性があるため(これはエラーではありませんが、最後の項目の読み取りがEOFにヒットしない原因になります)、最初に空白(失敗することはありません)を破棄してから、EOFをテストします。ファイルの終わりにいない場合にのみ、値を読み取ろうとします。
私のサンプルプログラムでは、それは確かに機能しているようで、私は
したがって、最初のケース(正しい入力)では、fail()
falseを返します。
今私の質問:この解決策は機能することが保証されていますか、それとも私はそれがたまたま望ましい結果をもたらしたのは(不幸な)幸運でしたか?また:望ましい結果を得るためのより簡単な(または、私の解決策が間違っている場合は正しい)方法はありますか?
c++ - istreamオブジェクトをブール式として使用できるのはなぜですか?
istream オブジェクトを bool 式として使用できる理由を知っている人はいますか? 例えば:
ここでinput >> iValue
は、ifstream オブジェクトへの参照を返します。このオブジェクトをブール式として使用できる理由を知りたいです。
ifstream クラスを調べたところ、次のメンバー関数が原因である可能性があることがわかりました。
この機能の詳細については、こちらを参照してください。
もしそうなら、誰かが私にこの機能を説明できますか? この関数のプロトタイプは、通常の演算子のオーバーロード宣言とは異なります。この関数の戻り値の型は何ですか?
そうでない場合、ifstream オブジェクトを bool 式として使用できる理由は何ですか?
あなたの助けを楽しみにしています!
チェン
c++ - C ++でのゲームプログラミング、この古い行は何ですか、そしてなぜそれが機能しないのですか?
エラーが発生したコード行は次のとおりです。これは2008年の私の本にあります。std::cin.get(std::cin.rdbuff()->in_avail()+1);
誰かがそれが何を意味し、なぜそれが私にエラーを与えるのか教えてもらえますか?
- アップデート -
rdbuffをrdbuf
に変更すると、次のエラーがスローされます。
c++ - 'getline'を呼び出すための一致する関数がありません
私はというクラスを持っていますparser
:
parser::parse
各行をループしたいので、次を使用しますstd::getline
。
ただし、コンパイラはこのエラーを出します。
しかし、の最初の引数std::getline
はタイプstd::istream&
ですよね?何が間違っているのでしょうか?
c++ - なぜこれでbad_allocエラーが発生するのですか?
現在、cinから文字列を読み取り、この関数の引数として使用され、データを使用してStudentオブジェクトを作成するStudentのメンバー関数を設定しようとしています。しかし、それは私にbad_allocエラーを与えていますか?関数が文字列を取得していることは知っていますが、新しいオブジェクトが作成された後、このエラーが発生します。
エラー:
コンストラクタ:
働き:
testStudent.cpp:
com - クラシック ASP で WinHttpRequest.ResponseStream (IStream に関連) を操作しますか?
VBScript/ASP でのResponseStream
プロパティを操作する方法はありますか? WinHttp.WinHttpRequest.5.1
少なくともIStream
(関連する) インターフェイスResponseStream
は ASP にある程度統合されています。
それとも、それがスクリプトで達成できる限界ですか? さらに先に進みたい場合は、独自の COM コンポーネントを作成する必要がありますか?
req.ResponseText
または のいずれかを使用できることがわかっていることに注意してくださいreq.ResponseBody
。興味深いのは、C 用にのみ文書化されているが、スクリプトにアクセスできる可能性がある (推測している)ものを使用して、スクリプトをさらに進めることができるかどうかを知ることです。私はCOMについて詳しくありません。
c++ - istream抽出演算子:解析の失敗を検出する方法は?
istream 抽出がこのように失敗したかどうかをどのように検出できますか?
編集-質問のタイトルはこれをカバーしていますが、本文で言及するのを忘れていました:適切な情報を提供するために、失敗が不適切なフォーマット、つまり解析によるものなのか、それとも他のIO関連の問題によるものなのかを本当に検出したいフィードバック (malformed_exception("x") など)。