从用户获取输入时出现问题

时间:2010-08-21 09:32:08

标签: c++ newline user-input

以下是代码:

cout << "Please enter the file path: ";
string sPath;
getline(cin, sPath);
cout << "Please enter the password: ";
string sPassword; getline(cin, sPassword);

问题是,当我运行它时显示“请输入文件路径:”然后显示“请输入密码:”然后等待密码。它似乎完全跳过第一个'getline()'。

稍后编辑:是的,之前有一些输入操作。

int iOption = 0;
while (iOption == 0)
{
    cout << "(E/D): ";
    switch (GetCH())
    {
    case 'E':
        iOption = 1;
        break;
    case 'e':
        iOption = 1;
        break;
    case 'D':
        iOption = 2;
        break;
    case 'd':
        iOption = 3;
        break;
    default:
        break;
    }
}

GetCH()的代码,以防有人问。

char GetCH ()
{
    char c;
    cin >> c;
    return c;
};

3 个答案:

答案 0 :(得分:0)

您需要清除输入流中可用的内容,如下所示

cin.clear();

cin.ignore(std::numeric_limits<std::streamsize>::max()) 

答案 1 :(得分:0)

在您调用GetCH时,getline输入的其余行仍然保留在缓冲区中,即至少为\n,这就是您正在阅读第一个getline电话。该程序不会阻止等待用户输入,因为仍然排队等待读取的部分行可以满足getline请求。

考虑修改GetCH函数以读取整行。

E.g。类似的东西(完全未经测试,我害怕):

int GetCH()
{
    std::string inputline;

    // Read until error or we receive a non-empty line
    while( std::getline(std::cin, inputline) && inputline.empty() )
    {
    }

    return inputline.empty() ? EOF : inputline[0];
}

答案 2 :(得分:0)

我在while循环之前有cin.clear()并修改了GetCH选项以获取带有'getline'的整个字符串,并且只返回第一个字母。

char GetCH ()
{
    string c;
    getline(cin, c);
    return c[0];
};

它现在就像一个魅力。感谢大家的帮助。

相关问题