代码如下:
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/