我有以下基于控制台C++的应用程序,该应用程序无限期地从用户读取,并且仅在用户键入命令"bye"时终止。
目标平台是Windows,使用的编译器是MS Visual Studio Enterprise 2015。
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
void ReadInput(void)
{
string x;
while (x != "bye")
{
getline(cin, x);
cout << x << endl;
}
}
BOOL CtrlHandler(DWORD fdwCtrlType)
{
switch (fdwCtrlType)
{
case CTRL_C_EVENT:
ReadInput();
return TRUE;
default:
return FALSE;
}
}
int main(void)
{
SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);
ReadInput();
return 0;
}
我想做的是,每当用户按下ctr-c时,CtrlHandler都会抓住它"通过ReadInput()重新打开shell",但是,这不是正在发生的事情,程序进入无限循环。
我的目标不是允许用户通过按 ctrl-c 来终止控制台应用程序,它应该仅在用户键入命令"bye"时终止。
是否可以为我的控制台窗口同时禁用事件 ctrl-c?
非常感谢您的意见。
事实证明,我需要检查标志 cin.fail() 和 cin.eof(),如果其中任何一个被设置,我使用 cin.clear() 清除 cin 的状态。