0

Задача вот какова: вытащить из текстового файла три значения с каждой строки: товар, магазина и цену. Я создал динамический массив структур list. Goods - структура, в ней три параметра name, shop, price. Вроде все считывается, но четвертой строки, как на картинке, быть не должно. Цикл просто дублирует число 50 с прошлой строки. Почему тогда снова считывает, если и так уже достигнут конец файла? И что нужно, чтобы решить проблему?введите сюда описание изображения

void Read(ifstream &file) {
    string s;
    while (file) {
        Goods product;
        file >> s;
        cout << s << " ";
        product.name = s;
        file >> s;
        cout << s << " ";
        product.shop = s;
        file >> s;
        product.price = stoi(s);
        cout << s << "\n";
        list.push_back(product);
    }
}
OneGuy
  • 152
  • См. https://ru.stackoverflow.com/questions/833980/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8-%D0%BA%D0%BE%D0%BD%D1%86%D0%B0-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0 – Harry Sep 23 '18 at 15:15
  • 1
    bool(file) возвращает false после неудачного чтения. Поэтому проверка на выход из цикла должна быть после попытки чтения из файла и до вставки в список. – HolyBlackCat Sep 23 '18 at 15:18
  • @Harry, спасибо. – OneGuy Sep 23 '18 at 15:26

0 Answers0