Visual c++ 如何在不丢失控制台的情况下捕获ctrl c Windows上如何在不丢失C++中控制台的情况下捕获Ctrl +C?< /P>
当我执行Visual c++ 如何在不丢失控制台的情况下捕获ctrl c Windows上如何在不丢失C++中控制台的情况下捕获Ctrl +C?< /P>,visual-c++,Visual C++,当我执行cin时,按一个数字或按CTRL+C键执行cin时,它执行相同的操作-它更改输入的位置并重新接受输入。 之后,如果我按CTRL+C并运行mysethadle函数,它将进入无限循环。但是,如果我按了一个数字,它就会正常工作 如何取消由SetConsolCtrlHandler生成的信号并继续执行cin而不会出现问题 我的代码是: // ctrlc.cpp : definisce il punto di ingresso dell'applicazione console. // #inclu
cin
时,按一个数字或按CTRL+C键执行cin
时,它执行相同的操作-它更改输入的位置并重新接受输入。
之后,如果我按CTRL+C并运行mysethadle
函数,它将进入无限循环。但是,如果我按了一个数字,它就会正常工作
如何取消由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;
}
//ctrlc.cpp:definisce il punto di ingresso dell的应用程序网络控制台。
//
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int mysethandle(句柄stdd,bool x);
int _tmain(int argc,_TCHAR*argv[]
{
int a、b、c、retu;
德沃德模式;
句柄stdd=GetStdHandle(标准输入句柄);
if(stdd==无效的句柄值)
{
库塔;
retu=mysethandle(stdd,true);
如果(retu==1){goto primo;}
设置控制台模式(stdd,模式);
第二:
retu=0;
cout>b;
retu=mysethandle(stdd,true);
如果(retu==1){goto secondo;}
c=a+b;
cout谢谢你的链接:
但老实说,我不理解三件事
1) 我怎样才能关掉信号
2) 为什么cin功能不起作用
3) 当cin功能停用时?感谢链接: