問題タブ [ifstream]

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 投票する
1 に答える
1052 参照

c++ - ifstream :: unget()は失敗します。MSの実装にバグがありますか、それとも私のコードに誤りがありますか?

昨日、基本的にifstreamからテキストを取得してトークン化する、かなり単純なコードに奇妙なバグを発見しました。実際に失敗するコードは、トークン「/ *」を探すget()/ peek()呼び出しを何度も実行します。トークンがストリームで見つかった場合、unget()が呼び出されるため、次のメソッドはトークンで始まるストリームを確認します。

時々、ファイルの長さだけに依存しているように見えますが、unget()呼び出しは失敗します。内部的にはpbackfail()を呼び出し、eOFを返します。ただし、ストリーム状態をクリアした後は、より多くの文字を楽しく読み取ることができるため、正確にはEOFではありません。

掘り下げた後、問題を簡単に再現する完全なコードを次に示します。

文字列の長さが通常のmultiple=of-2バッファサイズ4096、8192、12288に近づくと、プログラムは失敗します。出力は次のとおりです。

これは、Windows XPおよび7でテストした場合に発生します。どちらもデバッグ/リリースモードでコンパイルされ、両方とも動的/静的ランタイム、両方とも32ビットと64ビットのシステム/コンパイルで、すべてVS2008、デフォルトのコンパイラ/リンカーオプションを使用します。64ビットDebianシステムでgcc4.4.5を使用してテストした場合、問題は見つかりませんでした。

質問:

  1. 他の人がこれをテストできますか?SOからの積極的なコラボレーションを本当にいただければ幸いです。
  2. 問題を引き起こす可能性のあるコードに正しくないものがありますか(それが理にかなっているかどうかについて話していません)
  3. または、この動作をトリガーする可能性のあるコンパイラフラグはありますか?
  4. すべてのパーサーコードはアプリケーションにとってかなり重要であり、徹底的にテストされていますが、もちろん、この問題はテストコードでは見つかりませんでした。極端なテストケースを考え出す必要がありますか?もしそうなら、どうすればよいですか?これが問題を引き起こす可能性があることをどのように予測できますか?
  5. これが本当にバグである場合、どこに報告するのが最善ですか?
0 投票する
3 に答える
15050 参照

c++ - コンストラクターの問題でC++std :: ifstream

このコードに問題があります:

G ++は私にこれを出力します:

これに変更した後、コンパイルします(ただし、問題は解決しません)。

誰かが私に何が悪いのか、そしてそれを修正する方法を説明できますか?ありがとう。

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

c++ - istream が DEV C++ で機能しない

DEV c++ で ifstream 操作と ofstream 操作を使用していますが、正しく動作していないようです。素数ジェネレーターのコードを少し書こうとしましたが、うまくいきません :\ 任意の時点で fstream::tellg() を表示すると、-1 が表示されます:

(申し訳ありませんが、すべてを 1 つのコードブロックに収めることができませんでした。[code] タグに何か問題があるのでしょうか?)

出力:

NOT OPEN-1 2 -1 3 -1 4 -1 5 -1 6 -1 7 -1 8 -1 9 -1 10 -1 11 -1 12 -1 13 -1 14 -1 15 -1 16 -1 17 -1 18 -1 19 -1 20 -1 21 -1 22 -1 23 -1 24 -1 25 -1 26 -1 27 -1 2 8 -1 29 -1 30 -1 31 -1 32 -1 33 -1 34 -1 35 -1 36 -1 37 -1 38 -1 39 -1 40 -1 41 -1 42 -1 43 -1 44 -1 45 -1 46 -1 47 -1 48 -1 49 -1 50 Press any key to continue . . .

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

c++ - ファイルの抽出がファイル内の次の単語に進まないようです

これは以前にも起こったことがあると思います。これはA3.txt次のとおりです。

sourcefile >> readerループの最後で使用しても、プログラムは を出力し続けます。"reader: MARK"これは、ステートメントが機能していないことを意味しますsourcefile >> reader;(つまり、同じ入力を何度も取得し続けるか、入力を取得していません)。

また... オフトピック。コンパイラは、switch ステートメントは文字列では使用できないと言いましたが、それは本当ですか、それとも何か間違ったことをしたのでしょうか?

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

c++ - ifstream が再帰呼び出しで開くことができない

入力ファイルを解析しようとすると、奇妙な問題が発生します。このファイルには他のファイルを含めることができ、それらも解析する必要があるという考えです。次のように定義された関数でこれを再帰的に行っています。

int parse_inp(const char* filename)

メイン ファイルは問題なく解析されますが、再帰呼び出しはファイル ストリームを開くことができません。

再帰ファイルは解析されません。私は多くのことを調べましたが、ほとんどの問題は、失敗ビットが設定されていること (これがinp.clear()多くの呼び出しを行っている理由です)、または現在の作業ディレクトリについて間違った仮定を行っていることのいずれかであると思われました。

2 番目の理論をテストするために、以下を追加しました。

また、作業ディレクトリとファイル名はどちらも正しいです。fopen(filename, "r")--- の呼び出しを使用すると、同じ動作が見られperror("fopen")ます。結果は次のようになります。

fopen: no such file or directory

EDIT:より多くのコードを記入

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

c++ - isspaceのC++バージョン(コードをCからC ++に変換)

コードをCからC++に変換しています。私は現在C関数isspaceを使用していますが、ifstreamを使用する場合のC ++の同等物は何ですか?具体的にはwhile (!isspace(lineBuffer[l]))

idは最初の数字(2515、1676、279)であり、nameは最初の「スペース」(ABC、XYZ、FOO)の後の文字のセットです。

NewList.Txtの例

Cコード

C++コード

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

c++ - std::ofstream オブジェクトが正しく閉じない理由は何ですか?

C++ コードで、std::ofstreamオブジェクトを閉じるたびに、で閉じたファイルを再度開くことができないことに気付きましたstd::ifstreamstd::ifstreamopen関数は常に失敗します。

std::ofstream オブジェクトが適切に閉じられるようにするためにできる「追加の」ことはありますか?

誰かが私の特定のコードを確認するように依頼する可能性があるため、この投稿を小さく保つために、ここに貼り付けました。ケース a または d を実行した後の私のコードでは、std::ifstream開いているすべての呼び出しが失敗します。std::ofstream(この質問を投稿する前に、何人かの人々に私のコードで遊んでもらいましたが、未知の理由で失敗したこと以外は何も結論付けることができませんでした)

受け取ったすべての応答に事前に感謝します。

コードは

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

c++ - C ++でのテキストファイルから配列への入力の読み取り

私はプログラミングの初心者なので、優しくしてください。これまでのところ、私は C++ しか勉強しておらず、コンパイラとして Visual Studio 2010 を実行しています。このプログラムでは、テキスト入力ファイルから読み取り、情報を 3 つの配列のセットに書き込もうとしています。1 つの配列は名前のリストを処理し、残りの 2 つはそれぞれ勤務時間と時給です。後者の 2 つを使用して一連の収益を計算し、全体をレポートとして別のテキスト ファイルに出力します。ただし、私の問題は、最初の配列の入力を取得することです。私が使用している入力ファイルには、次のように配置されたテキストがあります。

J. Doe* 35 12.50 J. Dawn* 20 10.00 ..........

ifstream getline を使用して区切り記号として機能するアスタリスクを使用して名前を取得し、次の 2 つの数値を他の 2 つの配列に書き込もうとしているため、名前の後にアスタリスクが付きます。後者の 2 つの値は空白で区切られているため、問題は発生しないと思います。処理が必要なエラーが他にもあると確信していますが、残りのデバッグを開始する前に、最初のエラーを処理する必要があります。

エラー C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std ::streamsize,_Elem)': パラメータ 1 を 'std::string' から 'char *' に変換できません。

私が他の場所で読んだことから、問題は文字列を char 配列に書き込もうとしたことに起因すると思いますが、データ型が異なるため機能しません。名前を数値から分離するには区切り文字が必要なので、名前を取得するための他の実行可能な方法が存在するかどうかはわかりません。この問題を解決する方法についてアドバイスをいただければ幸いです。

ここに私が書いたソースがあります:

プログラム全体を含めて、コーディングのどこに行く予定かを理解してもらいます。助けてくれてありがとう!

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

c++ - C++ ifstream 関数とフィールド区切り

このプログラムでは、シェル スクリプトでデータ ファイルのフィールド セパレータのみを使用しました。しかし、標準ライブラリ関数 ifstream() を使用してデータ ファイルから読み込もうとしています。唯一の問題は、そのようにデータを取得していることです

A:KT5:14:エグゼクティブ デスク:

これはハッシュ テーブル用であり、データ構造とトランザクション タイプの行で値を区切る必要があります。私はウェブを見回してきましたが、フィールドセパレーターについてはあまり見つけていませんでした.私が見つけたものはかなり混乱していました.

問題は、ifstream 関数を使用してフィールド セパレータを設定する方法はありますか、それとも別の標準ライブラリ i/o 関数を使用する必要があるかということです。

ありがとう。

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

c++ - C ++では、文字列は改行文字なしでは印刷されません

ファイルを開いて、そこから行を取得しています。最初の行には、変数の数とその名前を記載する必要があります。2行目は、これらの変数を使用した論理方程式である必要があります。割り当ては、変数と方程式の真理値表を出力させることです。

プログラムが取り込む最初の行は、改行文字を挿入しないと印刷されません。文字列に変換して、printfとcoutの両方を使用してみました。

すべてを入力するメインファイル:

サンプル入力:

これからの出力:

これを引き起こしているものは何でも、プログラムの残りの部分でも問題を引き起こしていると思います。variableLineをトークン化した後、改行文字がないと印刷されず、数式を評価するときに2番目の変数が見つかりません。