所以我需要寫一個while循環針對的應該與此有關提示用戶的程序:如何在windows上用ctrl + c結束while循環?
char vector[10];
while(????){
print("Write a number");
scanf("%s",vector);
}
printf("Goodbye");
程序應該再見打印,當用戶按下Ctrl + C關閉。 我很確定我不能在這種情況下使用putchar?
所以我需要寫一個while循環針對的應該與此有關提示用戶的程序:如何在windows上用ctrl + c結束while循環?
char vector[10];
while(????){
print("Write a number");
scanf("%s",vector);
}
printf("Goodbye");
程序應該再見打印,當用戶按下Ctrl + C關閉。 我很確定我不能在這種情況下使用putchar?
#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;
}
看到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不能被重映射,但仍然可以被忽略掉 。這可能是你需要的。
張貼類似這樣的一個堆棧溢出: Catch Ctrl-C in C
您可能要檢查它。乾杯!
謝謝,這個練習實際上是在Linux下用ctrl + D來結束我,在windows上會是什麼樣子? – Tensora
@ajay什麼是EOF字符?常數EOF是一個不同於任何其他角色的常數。 – Brandin