2017-01-24 2 views
-5

Как я CIN целое затем строку «пробелами» это мой кодВвод Integer, то строка с пробелами с ++

int x;string s; 
    cout<<"Enter Integer"<<endl; 
    cin>>x; 
    cout<<"Enter the string with spaces"<<endl; 
    //if i used cin>>s here then it will not read all the text because it has spaces 
    // is i used getline(cin,s); then it will not read any thing 
+2

Почему #include ? –

+2

Что вы пробовали? Кроме того, * ПОЧЕМУ * все держат в том числе '' ?? – DeiDei

+0

<бит/stdC++. H> или любой другой, что угодно –

ответ

0

Проблема вы, вероятно, имея в том, что cin >> x читает только цифры, которые вы вводите, а не следующую строку новой строки. Затем, когда вы делаете cin >> s для чтения строки, процессор ввода видит новую строку и возвращает только пустую строку.

Решение состоит в использовании функции, предназначенной для считывания целых строк ввода, например std::getline. Не используйте оператор извлечения >> для интерактивного ввода.

0

Чтобы прочитать строку с пробелами use std::getline.

Но!

Обратите внимание на то, что происходит с >>, когда оно попадает в разделитель. Он останавливается и оставляет ограничитель в потоке. Это не проблема, если вы используете только >>, так как >> отбросит все пробелы. std::getline будет захватить этот пробел, и общий UseCase является

user types in number and hits enter 
user types in string and hits enter 

Так что же происходит? >> извлекает номер и останавливается, когда он попадает в пробелы. Это оставляет конец строки, помещенной в поток, нажав enter в потоке. std::getline приходит, и первое, что он видит, это ... конец строки. std::getline хранит пустую строку и сразу возвращается. Теперь программа обрабатывает пустую строку, и пользователь, все еще ожидая ввода строки, вводит строку, которая будет считываться некоторым будущим чтением, возможно, помещая входной поток в случай ошибки и, конечно же, давая пользователю сюрприз.

Общим решением является to use ignore(numeric_limits<streamsize>::max(), '\n');, чтобы использовать любые данные, все еще находящиеся в потоке, вплоть до конца строки, прежде чем запрашивать пользователя для ввода и вызова std::getline.

Смежные вопросы