В то время как ошибка цикла с cout и cin в С++? или это

В общем, я делал приложение для чата, а потом наткнулся на ошибку, которую не мог исправить. для того, чтобы не утечь мой исходный код, вот пример:

#include<iostream>
using namespace std;

int main()
{
    while (true) {
        string lol;
        cout << "you say >> ";
        cin >> lol;
    }
    return 0;
}

поэтому ошибка заключается в том, что когда вы вводите пробел в cin, как вы вводите: «привет, лол», он печатает «вы говорите >>» дважды, и чем больше пробела вы ставите, тем больше повторяется «вы говорите >>». Я действительно не понимаю, почему это так происходит. кто-нибудь может мне помочь?


person Spixa    schedule 06.05.2020    source источник
comment
cin >> lol пропускает все пробелы, сравните en.cppreference.com/w/cpp/ строка/основная_строка/operator_ltltgtgt.   -  person Werner Henze    schedule 06.05.2020
comment
Итак, вы посмотрели на этот вопрос, который объясняет, как обрабатывать пробелы в cin()?   -  person Mihai    schedule 06.05.2020
comment
К вашему сведению, вы объявляете новый экземпляр строки в начале цикла while и не печатаете каждый раз значение lol.   -  person Thomas Matthews    schedule 06.05.2020
comment
спасибо, ребята, я исправил это: #include<iostream> using namespace std; int main() { while (true) { static char lol[128]; cout << "you say >> "; cin.getline(lol,256); cout << lol << endl;; } return 0; }   -  person Spixa    schedule 06.05.2020


Ответы (1)


Это не ошибка, так работает .

operator>>() вместо std::string разделены пробелами, поэтому вы фактически получаете одно слово за раз.

Если вы хотите прочитать всю строку, используйте std::getline().

person Fred Larson    schedule 06.05.2020
comment
каков синтаксис std::getline()? - person Spixa; 06.05.2020
comment
getline — это функция, у нее такой же синтаксис, как и у любого другого вызова функции. - person john; 06.05.2020