2014-10-20 2 views
-1

Привет, ребята, я сталкиваюсь с неизвестной ошибкой, беря ввод от getline. Моя цель - взять число и две строки в качестве ввода от пользователя и напечатать первую строку. Вот код проблемыошибка в getline input в C++

#include <iostream> 
using namespace std; 

int main() { 
    int t; 
    cin>>t; 
    while(t--) 
    { string s,p; 
     getline(cin,s); 
     getline(cin,p); 
     cout<<s; 
    } 
    return 0; 
    } 

Теперь, когда я даю вход как:

1 
abababa abb 
b 

не печатает anything.Why это происходит?

+0

Почему Йиу с помощью 'while' здесь? – iokanuon

+0

Потому что он хочет запустить цикл t раз. Почему он не должен? –

+0

@AdrianMay 'Моя цель - взять число и две строки в качестве ввода от пользователя и напечатать первую строку.' – iokanuon

ответ

4

После cin>>t, есть символ новой строки, остающийся в потоке, то новая строка будет назначен s, так cout<<s кажется, не печатать ничего (На самом деле, она печатает символ новой строки).
Добавить cin.ignore(100, '\n'); перед первым getline для входа в новую строку.

+0

ok thnx a ton :) – gsdf

+0

@SurayansTiwari см. мое редактирование. – jfly

+0

Что такое 100 здесь? – gsdf

0

Я думаю, это потому, что getline() не игнорирует новый строковый ccharacter, но он читает его в следующем вызове yo getline. Попробуйте года поставить GetLine() перед каждым каллой, что-то вроде этого:

Int main() { 
int t; 
cin>>t; 

string s,p; 

getline(cin,s); 

while(t--) 
{ 
    getline(cin,s); 
    getline(cin, p); 
    getline(cin,p); 
    cout<<s; 
} 

Надеется, что это помогает :)

0

новой строки из cin >> t; после нажатия кнопки ввода еще в станде :: CIN, когда getline(cin,s) называется, в результате чего s становится пустым. Строка, которую вы вводите, фактически хранится в p. Попробуйте использовать другой метод захвата или очистить буфер cin перед его повторным использованием.

0

Каждый раз, когда вы используете cin, чтобы получить что-то вроде cin >> t, он оставит новую строку во входном буфере. поэтому в следующей операции это будет зависеть от этого и, похоже, пропустит «wait for return key» и, следовательно, ненормальность. Чтобы избежать этого, используйте cin::ignore.

documentation говорит:

извлекает символы из входной последовательности и отбрасывает их, пока либо п символов были извлечены, или один сравнивает равен DELIM.

Функция также прекращает извлечение символов, если достигнут конец файла . Если это достигается преждевременно (до извлечения n символов или нахождения delim), функция устанавливает флаг eofbit.

Я написал код в очень понятной форме, но работает Дайте мне знать, если у вас есть какие-либо проблемы

#include <iostream> 
using namespace std; 

int main() { 
    int t=0; 
cout<<"Enter t\n"; 
    cin>>t; 
    cin.ignore(); 
    while(t>0) 
    { string s,p; 
     cout<<"Enter s\n"; 
     getline(cin,s); 
     cout<<"Enter p\n"; 
     getline(cin,p); 
     cout<<" Values s:"<<s<<" p:"<<p<<"\n"; 
     t--; 
    } 
    return 0; 
    } 
+0

hahaha! Люди в SO очень быстры. Ты должен любить ТАК! –