-1

Проблема такая: есть файл, где данные записаны сплошным столбиком. Сначала имя, потом возраст. Данный кусок кода должен это всё дело считать с файла и записать в массив, с чем он справляется, но не так, как было задумано автором. Непонятно откуда берётся строка без текста и с 0. Если ввести размер не 3, а 5, то выводит что нужно, но с этими пустыми. Как я понял, оно их берёт из неоткуда и учитывает. Код функции ниже.Прошу, помогите!!!!!!

struct slist* getListfromFile(struct slist*& aol, string path, int size)
{
    path = getFilePath();
    fstream ListFile(path, fstream::in);
    for (int i = 0; i < size; i++)
    {
        getline(ListFile, aol[i].name);
        ListFile >> aol[i].score;
        ListFile.clear();
    }
    ListFile.close();
    return aol;
}

картинка с файлом

а вот что в консоли

KoVadim
  • 112,121
  • 6
  • 94
  • 160

1 Answers1

1

После считывания числа из файла

ListFile >> aol[i].score;

перевод строки остаётся не прочитанным, и будет прочитан на следующей итерации цикла гетлайном. После считывания числа просто игнорируй остаток строки

for (int i = 0; i < size; i++)
{
    getline(ListFile, aol[i].name);
    ListFile >> aol[i].score;
    ListFile.clear();
    ListFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

Пример на https://ideone.com/