2013-02-24 78 views
1

我有一个控制台应用程序,它等待用户输入一个字符串。它必须是getline,因为它可以包含空格。但它不会等待输入,它会跳过它并运行函数。这里是我的代码:不会等待getline C++

int main() 
{ 
    vector<person> people; 
    bool flag = true; 
    int num_people = 0; 
    //char*filename="names.txt"; 

    people = read_file(); 

    while(flag) 
    { 
     int sel = 0; 
     string args; 
     cout << "1 - Sök del av personnamn" << "\n" 
    << "2 - Sök städer" << "\n" << "3 - Avsluta" << endl; 
    cin >> sel; 
    if(sel == 1) 
    { 
       cout << "Mata in delen av personnamnet" << endl; 
       getline(cin, args); 
       print_result(find_in_names(people, args)); 
    } 
    else if(sel == 2) 
    { 
       cout << "Mata in staden" << endl; 
       getline(cin, args); 
       args = lower_letters(args); 
       print_result(find_person_from_city(people, args)); 
     } 
    else if(sel==3) 
    { 
     flag=false; 
    } 
    else 
    { 
     cout << "FEL, TRYCK OM!" << endl; 
    } 
    } 
} 

运行没有错误,它只是跳过getline,不让用户输入任何东西。

+0

看起来与需要帮助相同。 cin正在离开返回键按下,正在通过getline()读取它。 – 2013-02-24 20:31:23

回答

4

下面是使用getline()功能的简单方法:

#include <iostream> 
#include <string> 

using namespace std; 

int main(void) 
{ 
    string name; 
    int age; 

    cout << "How old are you ?" << endl; 
    cin >> age; 

    cin.ignore();    // for avoiding trouble with 'name' when we're gonne use getline() 

    cout << "What's your name ?" << endl; 
    getline(cin, name); 

    system("PAUSE"); 
} 

别忘了,如果你使用cin befor getline(),你必须把线:

cin.ignore(); 

所以你的代码应该看起来像这样:

int main() 
{ 
    vector<person> people; 
    bool flag = true; 
    int num_people = 0; 
    //char*filename="names.txt"; 

    people = read_file(); 

    while(flag) 
    { 
     int sel = 0; 
     string args; 
     cout << "1 - Sök del av personnamn" << "\n" << "2 - Sök städer" << "\n" << "3 - Avsluta" << endl; 
     cin >> sel; 

     cin.ignore() 

     if(sel == 1) 
     { 
      cout << "Mata in delen av personnamnet" << endl; 
      getline(cin, args); 
      print_result(find_in_names(people, args)); 
     } 
     else if(sel == 2) 
     { 
      cout << "Mata in staden" << endl; 
      getline(cin, args); 
      args = lower_letters(args); 
      print_result(find_person_from_city(people, args)); 
     } 
     else if(sel==3) 
     { 
      flag=false; 
     } 
     else 
     { 
      cout << "FEL, TRYCK OM!" << endl; 
     } 
    } 
} 

这里有一些doc http://www.cplusplus.com/reference/istream/istream/ignore/,希望它会有所帮助;