2016-02-03 2 views
-1

У меня есть следующая простая программа, но последняя строка кода getline(cin, topicClass) никогда не выпрашивается. Однако, если я использую обычный cin>>topicClass, который выполняется. Не могли бы вы мне помочь? Благодаряgetline (cin, string) не вычитается последней строкой кода

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

void InfoInput() 
{ 
    string classID; 
    string teacherName; 
    int totalStudent; 
    string topicClass; 
    cout<<"Enter class ID"<<endl; 
    getline(cin, classID); 
    cout<<"Enter teacher's name"<<endl; 
    getline(cin, teacherName); 
    cout<<"Enter total number of students"<<endl; 
    cin>>totalStudent; 
    cout<<"Enter topic of class"<<endl; 
    getline(cin, topicClass); 
    //cin>>topicClass; 
} 

int main() 
{ 

    InfoInput(); 
} 
+2

Возможный дубликат http://stackoverflow.com/questions/10553597/cin-and-getline-skipping-input –

+0

Возможно, ничего. Это «прибито!» @ AlgirdasPreidžius – user4581301

+0

Как вы определили, что 'getline' никогда не исполнялся? –

ответ

0

Там будет \n остался в cin после прочтения totalStudent как целое, так что вы должны получить, что \n первый из системы, а затем прочитать следующую строку,

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

void InfoInput() 
{ 
    string classID; 
    string teacherName; 
    int totalStudent; 
    string topicClass; 
    cout<<"Enter class ID"<<endl; 
    getline(cin, classID); 
    cout<<"Enter teacher's name"<<endl; 
    getline(cin, teacherName); 
    cout<<"Enter total number of students"<<endl; 
    cin>>totalStudent; 
    cout<<"Enter topic of class"<<endl; 
    getline(cin,topicClass); 
    getline(cin, topicClass); 
    //cin>>topicClass; 
} 

int main() 
{ 

    InfoInput(); 

} 
+0

Большое спасибо за ваши ответы, я понял. –

2

Ваша проблема выше, с эта строка:

cin>>totalStudent; 

Это не читает строки. Вы вводите свой ввод и (я полагаю), вы нажимаете ENTER. \n остается в буфере std::cin и читаются как пустая строка с вашей следующей инструкцией:

getline(cin, topicClass); 

Чтобы исправить, используйте этот код:

cin>>totalStudent; 
while(std::isspace(cin.peek()) 
    cin.ignore(); 
cout<<"Enter topic of class"<<endl; 
getline(cin, topicClass); 
0

Вашего classID и teacherName являются локальными переменными и исчезает после выполнения функции покидает функцию. Вам нужно будет выяснить, как передать параметры по ссылке, чтобы поделиться переменными между функциями.

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