Хм, посмотри на эту строчку повнимательнее:
while (myfile >> num);
В конце концов, вы заметите точку с запятой. Компилятор считает, что это означает, что вы хотите цикл, который ничего не делает (точка с запятой здесь указывает на одно пустое выражение). Итак, цикл читает все числа, но ничего с ними не делает.
Следующий раздел интерпретируется отдельно как оператор в своей собственной области (обозначается фигурными скобками), который должен выполняться после цикла:
{
x.push(num);
}
Все, что нужно, это поместить последнее прочитанное число в стек, что заставляет вас думать, что цикл выполняется только один раз.
Удалите ;
и все в порядке! Укушенный этим, вы никогда не забудете; -)
На несвязанной ноте немного глупо брать argv[1]
(строку в стиле C), помещать его в объект string
, а затем использовать c_str()
, чтобы превратить его обратно в C-строку для Конструктор ifstream. Просто используйте argv[1]
напрямую, так как вы больше ничего не делаете с ним. Кроме того, было бы неплохо сначала проверить argc
и убедиться, что передано имя файла. Наконец, вы должны проверить, что файл был успешно открыт, а не предполагать его - по крайней мере, сделайте ваше предположение явным с assert(myfile.is_open());
. О, и вы вообще не используете переменную line
.