【问题标题】:Infinite while loop and control-c无限while循环和control-c
【发布时间】:2015-01-13 22:34:59
【问题描述】:

所以,我写了以下代码:

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 退出无限 while 循环的内容,但这不适用于我编写的代码。我错过了一些简单的东西还是什么?有人可以指出我正确的方向吗?谢谢! (注意:这只是部分代码。)

【问题讨论】:

  • 您可以使用if 测试条件并使用break; 来打破循环
  • 你可以让条件按 ctrl-c 吗?如果是这样,那么如何编写这样的代码?
  • 使用信号处理程序做出回答,以便检查您是否按 ctrl-c!
  • 感谢所有帮助。显然,根据教授的说法,他犯了一个错误,并且 ctrl-c 退出 Visual Studio 中的程序,它不适用于我们正在使用的开发环境。再次感谢!

标签: c while-loop infinite-loop


【解决方案1】:

这应该适合你:

(这里我添加了一个信号处理程序,用于检查您是否按 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;

}

【讨论】:

  • 别忘了在while循环之前初始化stop =0
【解决方案2】:
while(1)
{
}

这是一个无限循环,while 循环中应该有一些条件可以跳出它。 ctrl+c 将终止您的程序。因此,在循环中应该有一些条件,而不是 ctrl+c,而 break 应该是其中的一部分。 如果应该使用ctrl+c 来跳出循环,那么您需要使用signal handler 来处理您的ctrl+c 信号

【讨论】:

  • 我们被特别告知要使用 ctrl-c
  • @user3727648 那么你需要使用信号处理器来处理ctrl+C
猜你喜欢
  • 2016-08-27
  • 2015-04-29
  • 1970-01-01
  • 2016-04-21
  • 2021-10-15
  • 2017-01-22
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
相关资源
最近更新 更多