在c ++中捕获ctrl-c导致忽略scanf

时间:2015-05-01 04:15:14

标签: c++

我正在尝试捕捉 Ctrl + c 。我在谷歌上搜索并找到这段代码:

#include <windows.h>
#include <iostream>
#include <signal.h>
#include<cstdio> using namespace std;

BOOL WINAPI ConsoleHandler(DWORD CEvent){
    if(CEvent == CTRL_C_EVENT){
        cout<<"ctrl c pressed"<<endl;
        Sleep(100);
    }
    return TRUE; }

int main(int argc, char *argv[]){
    char a[10];

    if (SetConsoleCtrlHandler( (PHANDLER_ROUTINE)ConsoleHandler,TRUE)==FALSE){
        cout<<"Unable to install handler!";
        return -1;
    }
    while(true){
        fflush(stdin);
        scanf("%[^\n]s",a);
        cout<<a<<endl;
    } }

运行此代码时我输入“ abcd ”然后显示“ abcd ”正常然后按 Ctrl + c '显示ctrl c按abcd **“我怎样才能修复此代码,以便按 Ctrl + <时显示” ctrl c press “ kbd> c ?

1 个答案:

答案 0 :(得分:0)

输出&#34; abcd&#34;再次是因为它仍然在你上次的a变量中。解决此问题的最佳方法是使用scanf的返回值。 scanf返回填写的项目数,因此在您的情况下,您希望它返回1.

if (scanf("%[^\n]s", a) == 1)
    cout<<a<<endl;