2013-02-11 29 views
0

我现在有一个非常混乱的问题。我为自己编写了一个测试程序,但是有时在输入Crtl + C之后,我认为它是EOF,程序提前关闭,但没有通过while循环下面的一些命令,我​​希望它取消。为什么我的C程序提前关闭?

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
char message[140]; 
    char* p = message; 
    int count; 
int i = 0; 
    int charGT; 
    while((charGT=getchar()) != EOF) 
    { 
     message[i] = charGT; 
     i++; 
     printf("%d" , i); 
    } 
    printf("next"); 
    count = strlen(p); 
    printf("%d", count); 
    printf("after"); 
    return (0); 
} 

输入“asd \ n^C”会导致我的程序提前结束。 “next”或“after”将不会被打印 我的理论是,某种程度上,\ n导致程序退出循环一段时间,然后Crtl + C正在退出程序,但是我没有知道如何工作。

+1

在* -nix上,'ctrl-C'发送SIGINT到前台进程。也就是说,它会杀死你的程序。 – 2013-02-11 04:41:51

+0

EOF字符因操作系统而异。你必须小心那个。 Windows,Unix和Linux可能会略有不同。 – TheLazyChap 2013-02-11 04:45:11

+0

哦!我懂了。所以做一个快速的谷歌,看起来像Crtl + Z是我正在寻找。谢谢。 – user2019645 2013-02-11 04:50:40

回答

3

Ctrl + C是break命令,它会向您的应用程序发送中断信号。默认处理程序将导致它退出进程。

按Ctrl +d是你正在寻找的EOF命令。

+0

我应该提到我在Windows上运行这个吗? Crtl + D似乎没有做任何事情,但增加了更多的输入到目前为止,我只看到Crtl + C做了任何有意义的事情,而Ctrl + C有时实际上是继续下去。 – user2019645 2013-02-11 04:46:43

+0

Hrm ...还是Ctrl + Z?我很少输入捕捉。 – PQuinn 2013-02-11 04:49:00

+1

Ctrl + Z,然后回车。 – 2013-02-11 04:52:01

3

对于在窗口上运行,输入EOF按Ctrl + Z然后按ENTER键。在UNIX系统中,它是Ctrl + D,在Windows Ctrl + Z中。

1

当一个程序正在运行,如果你按下Ctrl-c发送一个信号来中止程序并且程序被中止。但是,如果您想使用Ctrl-c作为输入,但不能中止程序,请在写入一个信号处理程序时按Ctrl-c并执行您想要的操作时捕获信号。

相关问题