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功能停用时?

感谢链接: