我有一个小型控制台应用程序,它接受用户输入,我有以下循环,不断询问用户输入,直到他们(a)输入他们的名字并按Enter或(b)按退出键。出于某种原因,当他们按下退出键时,他们必须按回车键,此时只有循环结束,控制台窗口仍然保持打开状态,我缺少什么?代码如下......
while (input.empty()) {
cout << "Enter Something";
getline(cin, input);
if (GetAsyncKeyState(VK_ESCAPE))
{
exit(EXIT_SUCCESS); // this should just close the console entirely, right?
}
}
答案 0 :(得分:2)
GetAsyncKeyState
后调用 getline
。 getline
等待用户键入一些数据并按Enter键(或者更确切地说,它等待从标准输入读取以换行符结尾的数据行)。只有在getline
完成后,此代码才会检查是否按下了ESC键。
请参阅此问题,了解您正在尝试完成的工作:How to read until ESC button is pressed from cin in C++
答案 1 :(得分:0)
我认为在If测试之前放置getline()不允许后者执行,因为前者会导致阻塞I / O.试试这个:
while (input.empty()) {
cout << "Enter Something";
if (GetAsyncKeyState(VK_ESCAPE)) {
exit(EXIT_SUCCESS);
}
getline(cin, input);
}