以下是代码:
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;
};
答案 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];
};
它现在就像一个魅力。感谢大家的帮助。