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

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

最佳答案

看起来为 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];
}

关于c++ - 从用户获取输入时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3537110/

相关文章:

c++ - 段错误,程序运行正常

android - 适用于 PC(非 Android)的 OpenSL 教程 ES

c++ - 找不到 -ljson11 的库,但找到 -lsqlite 3

HTML::Tidy Windows 换行问题

c# - 如何在 C# 中读取 SQLite 数据库中的换行符?

ruby-on-rails - WITH A COMMENT 在下一行继续声明

C++ - WINAPI - 缺少原始输入特定函数和结构?

testing - 填充os.Stdin以读取其中的函数

c++ - 在 C++ 中,另外两个不同的共享对象可以从第三个共享对象访问 Singleton 吗?

python - 如何调用包含带有输入函数数据的 kwargs 的函数?