c++ - 不会等待 getline C++

标签 c++ string input getline

<分区>

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

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 并且不让用户输入任何内容。

最佳答案

这是使用 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");
}

别忘了,如果你在 getline() 之前使用 cin,你必须输入以下行:

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;
        }
    }
}

这是一些文档 http://www.cplusplus.com/reference/istream/istream/ignore/ ,希望对您有所帮助;

关于c++ - 不会等待 getline C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15056120/

相关文章:

c++ - basic_string 文字在编译时速度更快还是处理得更好?

c - 为什么我的代码多次打印整个字符串而不是 1 次?

c++ - 我是否应该将使用 push_back 的代码更改为使用 std::move?

c - While 循环清除我的数组? (C)

c++ - 程序在构造函数期间崩溃

c++ - 如何合并两个 LPCWSTR?

javascript - js-jquery : prevent input from code injection

c# - 当用户输入是字符串并且它应该是 int.tryparse 的整数时,如何阻止 c# 崩溃?

c++ - std::boost::asio::post/dispatch 使用哪个 io_context?

c++ - 检查模板类是否存在函数