2014-02-16 4 views
0

Поэтому мне нужно написать whileloop для программы, которая, как предполагается, запрашивает у пользователя с этим:Как закончить whileloop с помощью ctrl + c в c на окнах?

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

Спасибо, это работает !, и ouch, супер сложный для меня, еще одна проблема, которая у меня есть на самом деле, есть строки кода в whileloop, которые я не хочу запускать после того, как пользователь нажал 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, но я просто хочу выйти из whileloop с каким-то ctrl +? – Tensora

+0

спасибо, упражнение на самом деле, чтобы закончить whileloop ctrl + D в Linux, что будет то же самое на окнах? – Tensora

0

сообщение похож на этот на переполнение стека: Catch Ctrl-C in C

Вы можете проверить это. Ура!

+0

спасибо, упражнение на самом деле, чтобы закончить меня с помощью ctrl + D в Linux, что будет в Windows? – Tensora

Смежные вопросы