В том, что вы показали, много неправильного. Ненужные переменные, фактическая обратная итерация, плохие условия l oop, et c.
Вот код с вектором:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::string line;
std::vector<std::string> entries;
do {
std::cout << "Enter a thing: ";
std::getline(std::cin, line);
if (!line.empty()) {
entries.push_back(line);
} else {
break;
}
} while (!line.empty());
for (auto it = entries.rbegin(); it != entries.rend(); ++it) {
std::cout << *it << ' ';
}
std::cout << '\n';
}
Если вы хотите go назад, вы используете обратный итератор. Это так просто. Но вектор - не идеальная структура данных для этого. Стеки подходят идеально.
#include <iostream>
#include <stack>
#include <string>
int main() {
std::string line;
std::stack<std::string> entries;
do {
std::cout << "Enter a thing: ";
std::getline(std::cin, line);
if (!line.empty()) {
entries.push(line);
} else {
break;
}
} while (!line.empty());
while (!entries.empty()) {
std::cout << entries.top() << ' ';
entries.pop();
}
std::cout << '\n';
}
Обе части кода дают вам то, что вы хотите, в гораздо более простом вопросе. Они завершают ввод пользователя l oop, когда вы просто нажимаете Enter, не набирая ничего (пустая строка). Используя преимущества Стандартной библиотеки (векторы, стеки, строки и т. Д. c.), Не торопитесь, чтобы ознакомиться с тем, что они могут делать. Скорее всего, обычные задачи позаботятся о вас.