Не знаете, как исправить ошибку 'std :: out_of_range' - PullRequest
0 голосов
/ 30 января 2019

Работа над программой, для которой задан список, подобный разделенному "," и помещением содержимого в вектор.

Test.txt содержит:

"45001524", "МОЧИ МОРОЖЕНОЕ КРЕМ", "LI", "19022128593", "GT Japan, Inc.", "2017-11-15 19:19:38 "," 2017-11-15 19:19:38 "," ИНГРЕДИЕНТЫ МОРОЖЕНОГО: МОЛОКО, КРЕМ, САХАР, КЛУБНИКА (КЛУБНИКА, САХАР), ТВЕРДЫЕ КУКУРУЗНЫЕ СИРОПЫ, МОЛОЧКО, КОЖА,Природный аромат, гуаровая смола, моно и диглицериды, свекольный сок и порошок свеклы (для цвета), целлюлозная камедь, камедь из плодов бобов, каррагенан. Ингредиенты для покрытия: сахар, вода, рисовая мука, бетон, витаминFOR COLOR), DUSTED WITH CORN & POTATO STARCH "

Функция readFile передается этому test.txt, уже открываясь, и пытается импортировать каждую разделенную", "строку в структуру8 типов строк.Имя Структуры itemType.

int itemNumber - это число.

void readFile( ifstream& inFile, vector<itemType>& item, int& itemNumber)
{


string currentLine;
int indexDef = 0;

while(getline(inFile, currentLine) && itemNumber < MAX_DB_SIZE){

    indexDef = 0;
    getQuotedString(currentLine, indexDef, item[itemNumber].NDBNumber);
    getQuotedString(currentLine, indexDef, item[itemNumber].longName);
    getQuotedString(currentLine, indexDef, item[itemNumber].dataSource);
    getQuotedString(currentLine, indexDef, item[itemNumber].upc);
    getQuotedString(currentLine, indexDef, item[itemNumber].manufacturer);
    getQuotedString(currentLine, indexDef, item[itemNumber].dataModified);
    getQuotedString(currentLine, indexDef, item[itemNumber].dataAvailable);
    getQuotedString(currentLine, indexDef, item[itemNumber].ingredients);
}

}

bool  getQuotedString( string& line, int& index, string& subString)
{
    int endIndex;
    //Start at 1st ' " '
    endIndex = index;
    //Find the next ' " '
    index = line.find('"', index+1);
    //subString = the characters between the first ' " ' and the second ' " '
    subString = line.substr(endIndex+1, index-endIndex-1);

    cout << subString << endl;

    //Move the second ' " ' over 2, passing over the comma and setting it on the next "
    index = index+2;
}

Я использую cout << subString для тестирования.

Он выводит все идеально, как яхочу, но после последнего вывода выдает ошибку

terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr: __pos (which is 1) > this->size() (which is 0)
Aborted (core dumped)

Я не могу на всю жизнь понять это: \ Я думаю, что мой индекс переполняет длину файла, но я не уверен, как это исправить.

1 Ответ

0 голосов
/ 30 января 2019

Какой-то придурок не увеличивал свой itemNumber.Добавление itemNumber ++ в void readFile решило проблемы, и теперь оно читается соответствующим образом.

...