如何在Windows上使用ctrl + c结束while循环?

时间:2014-02-16 20:45:43

标签: c windows eof

所以我需要为一个程序编写一个while循环,该程序应该提示用户:

char vector[10];
while(????){
    print("Write a number");
    scanf("%s",vector);
}

printf("Goodbye");

当用户按下ctrl + c时,程序应打印再见并关闭。 我很确定在这种情况下我不能使用putchar吗?

4 个答案:

答案 0 :(得分:1)

#include <windows.h>
#include <stdio.h>

static end_flag = 0;

BOOL WINAPI controlHandler(DWORD type){
    if(type == CTRL_C_EVENT){
        end_flag = 1;
        return TRUE;
    }
    return FALSE;
}

int main(){
    char vector[10];

    if (!SetConsoleCtrlHandler(controlHandler, TRUE)) {
        fprintf(stderr, "Failed SetConsoleCtrlHandler");
        return -1;
    }
    while(!end_flag){
        printf("Write a number ");
        scanf("%s",vector);
    }

    printf("Goodbye");
    return 0;
}

CTRL + Z版

#include <stdio.h>

int main(){
    char vector[10];

    while(1){
        printf("Write a number ");
        if(scanf("%s", vector)==EOF)//press CTRL+Z
            break;
    }

    printf("Goodbye");
    return 0;
}

答案 1 :(得分:0)

请参阅https://superuser.com/questions/214239/whats-the-command-prompts-equivalent-to-cygwins-ctrlz

  

取决于“退出某事”的意思;在Windows cmd中:

     

Ctrl + Z发送EOF字符,如果可以终止进程   你提供输入,但否则可能什么都不做。

     

Ctrl + C通常会将SIGINT发送到前台进程,这应该是   终止它,但程序可以响应他们喜欢的 - 即他们   可以捕获信号然后忽略它。该命令也可以   重新映射到其他工作(对于特定程序,它不会   真的发送信号)或完全忽略。

     

Ctrl + Break总是发送SIGBREAK,它应该再次终止   进程,但不像Ctrl + C不能重新映射,但仍然可以   忽略。这可能就是你所需要的。

答案 2 :(得分:0)

答案 3 :(得分:0)

在Stack Overflow上发布与此类似的帖子: Catch Ctrl-C in C

您可能想要查看它。干杯!