Условие в цикле while не работает так, как вы думаете.
while (inputFile.eof() || drinkMachine.totalDrinks == 20)
При выполнении ввода в цикле вы должны сначала выполнить извлечение, проверьте, если оноуспешно, затем продолжить.eof()
проверяет, установлен ли eofbit (бит конца потока) в потоке, что происходит, когда предыдущее извлечение не удалось.Обычно при выполнении извлечения вы проверяете правильность потока с помощью fail()
.
while (inputFile >> drinkMachine.totalDrinks && !inputFile.fail() && drinkMachine.totalDrinks == 20)
. Мы можем избавиться от !inputFile.fail()
, поскольку каждый поток имеет встроенный operator bool()
, поэтому он проверяет fail()
неявно:
while (inputFile >> drinkMachine.totalDrinks && drinkMachine.totalDrinks == 20)
Ваши другие проблемы указаны Acorn.