在Windows上如何在不丢失C ++控制台的情况下捕获CTRL + C?
当我执行cin
时,按下一个数字或按CTRL + C cin
它会做同样的事情 - 它会改变输入的位置并重新接受输入。
之后,如果我按CTRL + C并运行mysethandle
函数,那么它将进入无限循环。但是,如果我按了数字,它就能正常工作。
如何取消SetConsolCtrlHandler
生成的信号并继续cin
而不会出现问题?
我的代码是:
// ctrlc.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
int mysethandle(HANDLE stdd, bool x);
int _tmain(int argc, _TCHAR* argv[])
{
int a,b,c,retu;
DWORD mode;
HANDLE stdd = GetStdHandle(STD_INPUT_HANDLE);
if (stdd == INVALID_HANDLE_VALUE)
{
cout << "handle non valido\n";
return 0;
}
GetConsoleMode(stdd, &mode);
mode &= ~ENABLE_PROCESSED_INPUT;
primo:
retu = 0;
SetConsoleMode(stdd, mode);
cout << "\ninserisci a: ";
cin >> a;
retu = mysethandle(stdd, true);
if (retu==1) { goto primo; }
SetConsoleMode(stdd, mode);
secondo:
retu = 0;
cout << "inserisci b: ";
cin >> b;
retu = mysethandle(stdd, true);
if (retu==1) { goto secondo; }
c=a+b;
cout << "\n " << a << " + " << b << " = " << c << "\n";
return 0;
}
int mysethandle(HANDLE stdd, bool x)
{
if (SetConsoleCtrlHandler(NULL, x))
{
cout << "\n HAI PREMUTO CTRL C \n";
SetConsoleMode(stdd,ENABLE_PROCESSED_INPUT);
return 1;
}
return 0;
}
答案 0 :(得分:0)
感谢您的链接:http://www.codeproject.com/Articles/207464/Exception-Handling-in-Visual-Cpluspl。
但老实说,我没有记下3件事
1)我如何关闭信号?
2)为什么cin功能不起作用?
3)当cin功能停用时?