【问题标题】:Problem getting input from user从用户那里获取输入的问题
【发布时间】:2010-08-21 09:32:08
【问题描述】:

代码如下:

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

【问题讨论】:

  • 这是完整的代码吗?这段代码执行前你有没有做过输入操作?

标签: c++ newline user-input


【解决方案1】:

看起来为GetCH 输入的行的其余部分在您调用getline 时仍保留在缓冲区中,即至少有一个\n,这就是您在第一次阅读的内容getline 打电话。程序不会阻塞等待用户输入,因为 getline 请求可以通过仍排队等待读取的部分行来满足。

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

例如像(完全未经测试,恐怕):

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】:

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

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

    【讨论】:

    • 第二行似乎不起作用。它给了我 2 个错误(我添加了半列)。
    【解决方案3】:

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

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

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

    【讨论】:

    • 虽然回答您自己的问题完全没问题,但如果您本质上是在重复其他答案,那么用“接受”奖励其他答案中的一个更有意义,而不是在另一个答案中复制它。我不是“乞求”接受(我在其他地方有足够的接受!);只是观察到您可能需要一些有关 stackoverflow.com 工作方式的指导。
    猜你喜欢
    • 2019-04-11
    • 2019-06-19
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多