Каждый раз, когда вы используете cin >> ans
, ans
перезаписывается.Если вы хотите продолжить получать ввод после первого пробела, вам нужно использовать цикл, который проверяет клавишу ввода с помощью std::cin.peek()
(или вместо этого использовать что-то вроде std::getline()
), например
#include <iostream>
#include <string>
int main() {
std::string ans;
std::cout << "Input: " << std::flush;
while (std::cin.peek() != '\n') {
std::cin >> ans;
}
std::cout << "ans: " << ans << std::endl;
}
Но вывод здесь, если ввод hello world
будет
ans: world
Почему?Поскольку ans
был перезаписан, существует два простых способа: использовать массив или вектор для хранения каждого cin
отдельно или объединить их все.
Первый метод
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> answers;
std::string ans;
std::cout << "Input: " << std::flush;
while (std::cin.peek() != '\n') {
std::cin >> ans;
answers.push_back(ans);
}
std::cout << "ans: ";
for (int ii = 0; ii < answers.size(); ii ++) {
std::cout << answer[ii] << " ";
}
std::cout << std::endl;
}
Который будет выводить (формат вывода можно легко настроить)
ans: hello world
Второй метод
#include <iostream>
#include <string>
int main() {
std::string ans;
std::string answers = "";
std::cout << "Input: " << std::flush;
while (std::cin.peek() != '\n') {
std::cin >> ans;
answers += ans+" ";
}
std::cout << "ans: " << answers << std::endl;
}
Который аналогично будет выводить
ans: hello world
Первый метод более гибок - каждый вход поддерживается отдельно в std::vector
, и они могут быть выведены или обработаны по мере необходимости, второй метод проще только вчто он не требует включения STL.