2014-02-16 152 views
0

所以我需要寫一個while循環針對的應該與此有關提示用戶的程序:如何在windows上用ctrl + c結束while循環?

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

printf("Goodbye"); 

程序應該再見打印,當用戶按下Ctrl + C關閉。 我很確定我不能在這種情況下使用putchar?

+0

@ajay什麼是EOF字符?常數EOF是一個不同於任何其他角色的常數。 – Brandin

回答

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; 
} 
+0

謝謝,它的工作原理!,並且對我來說超級複雜,我遇到的另一個問題實際上是while循環中有一些代碼行,我不想在用戶按下ctrl + c之後運行。有救援嗎? – Tensora

+0

@Tensora我認爲它使用'exit(1)'而不是設置標誌。 – BLUEPIXY

+0

ctrl + z版本現在可以正常工作,但它會打印z ^,然後用戶必須在退出循環之前按下一次輸入。我對這個 – Tensora

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不能被重映射,但仍然可以被忽略掉 。這可能是你需要的。

+0

我認爲我們應該使用EOF,但我只是想用某種ctrl +走出while循環? – Tensora

+0

謝謝,這個練習實際上是在Linux下用ctrl + D結束whileloop,在windows上會是什麼樣子? – Tensora

0

張貼類似這樣的一個堆棧溢出: Catch Ctrl-C in C

您可能要檢查它。乾杯!

+0

謝謝,這個練習實際上是在Linux下用ctrl + D來結束我,在windows上會是什麼樣子? – Tensora