stream — введите несколько строк с помощью оператора & gt; & gt; Переполнение стека

Следующий код сделан:

#include <string>
#include <iostream>
using namespace std;

int main() {
string s;

while(true) {
cin >> s;
cout << "type : " << s << endl;
}
}

Вывод консоли:

ВХОД: usa americ england gana

ВЫХОД:

type : usa
type : americ
type : england
type : gana

ВХОД: hello world

ВЫХОД:

type : hello
type : world

Всякий раз, когда я набираю «usa americ englend gana» и затем вводу, он отображает каждую строку, введенную через cin, в блоке while.

Есть ли причина для этого? Как «поток буферизируется»?

Как я могу сделать так, чтобы при вводе нескольких строк через cin пробелы не разделялись? Есть ли какая-то конкретная функция или ответ на эту проблему?

-2

Решение

Один звонок operator>> из std::cin читает только до первого пробела. Когда вы вводите 4 слова в одну строку, ваш std::cin читает первое слово, принимает его, и выполнение продолжается. Но остальные 3 слова все еще ожидают чтения во входном потоке, и они будут прочитаны при следующем вызове operator >>,

Итак, чтобы проиллюстрировать, что происходит, вот пример:

Input stream content: [nothing]
//(type usa americ england gana)
Input stream content: usa americ england gana
//cin >> s;
s == "usa"Input stream content: americ england gana
//cin >> s;
s == "americ";
Input stream content: england gana
//etc.

Вы можете попробовать std::getline вместо этого читать целые строки. Только не смешивайте std :: cin и std :: getline.

while(true) {
std::getline(std::cin, s)
cout << "type : " << endl;
}
2

Другие решения

Программа, которую вы даете, не является правильной, ее невозможно скомпилировать из-за опечатки. inlcude, второй в вашем выводе записывается значение ‘s’, даже если это отсутствует в cout << …

В любом случае, я думаю, что понимаю вашу (ложную) проблему: cin не пропускается, вход находится в режиме блокировки, пока вы не введете конец строки, поэтому первый cin возвращается, когда все строка «сша америка англия гана \ n» читается, а не тогда, когда читается только «сша», поэтому программе не нужно ждать, чтобы вернуть «америку», ни «англию», ни «гана»

0

По вопросам рекламы ammmcru@yandex.ru