Как прочитать файл в массив строк; странная ошибка - PullRequest
1 голос
/ 19 января 2012

почему это не работает? Я не получаю сообщение об ошибке, моя программа просто падает.

    ifstream inStream;
    inStream.open("Sample Credit Card numbers.txt");
    string next[100];
    for (int i = 0;!inStream.eof();i++)
    {          
        next[i] = inStream.get();//fill in the array with numbers from file
    }

Я думаю, что! InStream.eof () часть цикла for может быть проблемой, но я не совсем уверен.

Ответы [ 3 ]

0 голосов
/ 19 января 2012

Цикл до eof() почти наверняка не то, что вы хотите сделать. См. Почему iostream :: eof внутри условия цикла считается неправильным? .

istream::get() извлекает символ из потока и возвращает его значение (приведенное к int), но вы помещаете его в массив std::string. Это кажется странным.

Вы также жестко запрограммировали массив из 100 элементов, но не проверили, чтобы убедиться, что вы не перегружаете буфер.

Вместо этого вы должны предпочесть что-то вроде этого:

std::ifstream inStream("Sample Credit Card numbers.txt");
if (inStream)
{
    std::string number;
    std::vector<std::string> next;
    while (std::getline(inStream, number))
    {
        next.push_back(number);
    }
}
else
{
    // Failed to open file. Report error.
}
0 голосов
/ 19 января 2012

Ваша программа на самом деле отлично работает для меня с небольшим набором чисел в файле. Однако две вещи могут вызывать у вас проблемы:

  1. Вы не проверяете, был ли файл открыт успешно, и если он этого не сделал, произойдет сбой.
  2. Вы не проверяете, достаточно ли в вашем массиве строк, что если в вашем файле больше чисел, чем 100? Это также может привести к сбою.
0 голосов
/ 19 января 2012

попробуйте это:

for (int i = 0; ! inStream.eof() && i < 100; i++)

Если вы можете отлаживать свою программу, вы можете перейти к циклу for и выяснить, что не так, если она все еще падает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...