Вы можете понять, почему это не работает, если вы выводите то, что вы сохранили в local
(кстати, это плохое имя переменной: P):
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
string local;
getline(cin, local);
std::cout << "> " << local << std::endl;
}
//............................
return 0;
}
Вы увидите, что он печатает новую строку после >
сразу после ввода вашего номера. Затем он переходит к вводу остальных.
Это потому, что getline
дает вам пустую строку, оставшуюся от ввода вашего номера. (Он читает число, но, по-видимому, не удаляет \n
, поэтому у вас остается пустая строка.) Сначала необходимо избавиться от оставшихся пробелов:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
cin >> ws; // stream out any whitespace
for(int i = 0; i < n; i++)
{
string local;
getline(cin, local);
std::cout << "> " << local << std::endl;
}
//............................
return 0;
}
Это работает, как ожидалось.
Не по теме, возможно, это было только для фрагмента, но код, как правило, может быть больше читабельным, если у вас нет using namespace std;
. Это побеждает цель пространств имен. Я подозреваю, что это было только для публикации здесь.