2016-03-22 2 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 означает коллективный диск? # FALSE # – suprkain

ответ

1

Сначала вы должны не петля на EOF в C++.

Тогда вы должны убедиться, что numQ и numA не выходят за пределы, так как их величина зависит от содержания файла:

... 
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

Смежные вопросы