无限循环和控制-c

时间:2014-11-17 04:26:09

标签: c while-loop infinite-loop

所以,我写了下面的代码:

void main(void) {

int charNums[ALPHABET], i = 1;
char word[MAX];

while(i) {

    initialize(charNums, word);

    getString(word);
    setLetters(charNums, word);

    getString(word);
    checkLetters(charNums, word);

    if(isZero(charNums))
        printf("Anagram\n");
    else
        printf("Not anagram\n");
}
}

while循环是无限的,它应该是无限的。我的教授说了一些关于使用CTRL-C退出无限循环的东西,但这对我编码的东西不起作用。我错过了一些简单或什么?有人可以指点我正确的方向吗?谢谢! (注意:这只是代码的一部分。)

2 个答案:

答案 0 :(得分:4)

这应该适合你:

(这里我添加了一个信号处理程序,检查你是否按ctrl + c,如果是这样,它会停止循环)

#include <unistd.h>
#include <stdio.h>
#include <signal.h>

volatile sig_atomic_t stop;

void inthand(int signum) {
    stop = 1;
}

int main(int argc, char **argv) {

    signal(SIGINT, inthand);

    while (!stop)
        printf("loop\n");

    printf("exiting safely\n");
    system("pause");

    return 0;
}

所以我认为你的程序应该是这样的:

#include <unistd.h>
#include <stdio.h>
#include <signal.h>

volatile sig_atomic_t stop;

void inthand(int signum) {
    stop = 1;
}

int main(int argc, char **argv) {

    signal(SIGINT, inthand);

    int charNums[ALPHABET], i = 1;
    char word[MAX];

    while(!stop) {

        initialize(charNums, word);

        getString(word);
        setLetters(charNums, word);

        getString(word);
        checkLetters(charNums, word);

        if(isZero(charNums))
            printf("Anagram\n");
        else
            printf("Not anagram\n");
    }

    printf("exiting safely\n");
    system("pause");
    return 0;

}

答案 1 :(得分:0)

while(1)
{
}

这是一个无限循环,在while循环中应该有一些条件来突破它。 ctrl+c将终止您的计划。因此,在循环内应该有一些条件,而不是ctrl + c。break。 如果ctrl+c应该用于摆脱循环,那么您需要使用signal handler来处理ctrl+c信号