1

そのため、ファイルの読み取りと書き込みを処理するプログラムを作成しています。テキスト ファイルの一部の行には複数の要素が含まれている可能性があるため、getline() 関数を使用します。今まで getline で問題が発生したことはありません。これが私が得たものです。

テキスト ファイルは次のようになります。

  John Smith                       // Client name
  1234 Hollow Lane, Chicago, IL    // Address
  123-45-6789                      // SSN
  Walmart                          // Employer
  58000                            // Income
  2                                // Number of accounts the client has
  1111                             // Account Number
  2222                             // Account Number

そして、次のようなコード:

ifstream inFile("ClientInfo.txt");
if(inFile.fail())
{
    cout << "Problem opening file.";
}
else
{
    string name, address, ssn, employer;
    double income;
    int numOfAccount;

    getline(inFile, name);
    getline(inFile, address);
    // I'll stop here because I know this is where it fails.

このコードをデバッグしたところ、name == "John Smith" ではなく、name == "John"、Address == "Smith" などであることがわかりました。私は何か間違ったことをしていますか?どんな助けでも大歓迎です。

4

1 に答える 1

2

表示するコードは、そのファイルで機能するはずです。だから、何かがあなたが思っているよりも違うはずです。最も可能性の高い犯人は次のとおりです。

  1. ファイルには実際にはスペースしかないと思われる改行があります
  2. コードは、使用inFile >> nameすると思われる場所を使用しますgetline(inFile,name)

おそらく、何かを変更して保存または再コンパイルするのを忘れたか、思ったよりも別のファイルを読み込んでいる可能性があります。

ところで、変数宣言から、 のようgetline()な抽出演算子の呼び出しと呼び出しを混在させることを計画しているように見えますinFile >> income。これらを混在させるには注意が必要です。これは、抽出演算子が後続の空白を残し、getline()それが読み取られる可能性があるためです。このの下部に詳細があります。

于 2012-01-25T18:44:54.063 に答える