2016-03-22 7 views
0

私のコードに何が間違っているかわかりません。私は、情報が正しく読み込まれ、配列に入力されていることを確認するためにウォッチを追加しました。私が得ているエラーは:アクセス違反の書き込み場所を探す

アクセス違反の書き込み場所です。

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() 
{ 
//string name; 
//double id = 0; 
int numQ = 0; 
int numA = 0; 

string temp; 
string arrayQ[50]; 
string arrayA[50]; 

fstream SaveFile; 
SaveFile.open("TestBank.txt", ios::in); 
while (!SaveFile.eof()) 
{ 
    getline(SaveFile, temp, '#'); 
    if (temp.length() > 5) 
    { 
     arrayQ[numQ] = temp; 
     numQ++; 
    } 
    else 
    { 
     arrayA[numA] = temp; 
     numA++; 
    } 
} 
SaveFile.close(); 

cout << "The question is\n" << arrayQ[0] << endl; 
cout << "The answer is\n" << arrayA[0] << endl; 

return 0; 
} 
+0

50本以上の質問線または50本以上の回答線がありますか? – immibis

+0

私の推測では、 'numQ'や/および' numA'は> 49を取得します。確認できますか? – DimChtz

+0

いいえ私はまさに50行あります。 numQとnumAの両方が50になります。これは私が読んでいるような行のようです:CDは集合ディスクの略ですか?#偽# – suprkain

答えて

1

あなたがC++でのEOFのループいけない初。

その後、あなたは彼らの値がファイルの内容に依存してnumQnumAは、境界の外に出ていないことを確認する必要があります。

... 
while (getline(SaveFile, temp, '#')) 
{ 
    if (temp.length() > 5) 
    { 
     if (numQ>=50) 
      cerr << "Ouch ! numQ=" <<numQ<<endl; 
     else arrayQ[numQ] = temp; 
     numQ++; 
    } 
    else 
    { 
     if (numA>=50) 
      cerr << "Ouch ! numA=" <<numA<<endl; 
     else arrayA[numA] = temp; 
     numA++; 
    } 
} 

最後に、あなたの代わりに文字列配列のvector<string>の使用を検討できます。この場合、あらかじめ決められたサイズを心配することなく、右のベクトルの文字列をpush_back()とするだけです。

+0

まだどちらかを学んだことはありませんが、私はそれらを理解するかどうかを参照してください。 – suprkain

関連する問題