Используя именно тот ввод, который вы опубликовали выше:
4
1 + 1 * 2 =
29 / 5 =
103 * 103 * 5 =
50 * 40 * 250 + 791 =
Я могу воспроизвести вашу ошибку:
завершить вызов после выброса экземпляра 'std :: invalid_argument'
what (): stoll
Прервано
Могу поспорить, что вы удалили символы новой строки в образце ввода, чтобы упростить вещи - вот как это выглядит из вашего кода в любом случае.Вы делаете getline
и вытягиваете ровно столько строк, сколько указано в первом входе.Это означает, что вы вытянете пустую строку (intermediate
будет пустой строкой) и попытаетесь ее обработать.
А что происходит, когда вы пытаетесь вызвать stoll("")
?Полученная ошибка!
Вы могли бы попытаться проверить, получаете ли вы пустую строку, а затем продолжить, что-то вроде:
getline(cin, str, '\n');
if(str.empty()) {
t++; //we didn't actually do anything, so increment t
continue;
}
stringstream split(str);
...
Или вы можете использоватьтот факт, что оператор >>
уже останавливается при попадании в пробел (и съедает все пробелы, которые он может получить, чтобы перейти к следующему съедобному символу).Поэтому вместо чтения строки за раз вы можете продолжить чтение, пока не наберете символ =
.