我有以下基于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会抓住它&#34;通过ReadInput()&#34;重新打开shell,然而,这就是&#34; s不是发生了什么,程序进入无限循环。
我的目标是不允许用户通过按ctrl-c终止控制台应用程序,它应该仅在用户键入命令&#34; bye&#34;时终止。
甚至可以为控制台窗口一起禁用事件ctrl-c吗?
非常感谢您的意见。
答案 0 :(得分:1)
事实证明我需要检查标志 cin.fail()和 cin.eof(),如果设置了其中任何一个,我清除cin的状态为 cin.clear()。