具有C语言功能的简单无限循环

时间:2013-10-28 03:43:19

标签: c function loops while-loop infinite

我不确定为什么在运行此代码时会出现无限循环。我可以让它在没有这个功能的情况下运行得很好,但那会破坏我将要做的一切的目的。任何人都可以花一点时间看看这个导致我的程序崩溃的功能发生了什么?

#include <stdio.h>
#define ROWS 5

int checkStatus(int manStatus[]) {

    int i;
        for(i = 0; i < ROWS; i++)
        {
            if(manStatus[i] == -1)
                printf("Sorry, but %d is still single!\n", i);
                return 1; //True
        }
        return 0; //False
    }

void main() {

    int manStatus[ROWS];
    int i=0;

    //Initialize each man to -1, as in single:
    for(i=0; i < ROWS; i++) {
        manStatus[i] = -1;
    }

    i=0;
    while ( (checkStatus(manStatus) ) ) {

        printf("Still Single People!");
        manStatus[i] = 0;
        i++;
    }
}

5 个答案:

答案 0 :(得分:2)

你需要一个大括号,在这里:

    if(manStatus[i] == -1)
       {
            printf("Sorry, but %d is still single!\n", i);
            return 1; //True
       }

没有它将永远返回true(返回1),因此 会在main()中创建一个无限循环

答案 1 :(得分:2)

您缺少一对大括号({}):

        for(i = 0; i < ROWS; i++)
        {
            if(manStatus[i] == -1)
                printf("Sorry, but %d is still single!\n", i);
                return 1; //True
        }

将其更改为:

        for(i = 0; i < ROWS; i++)
        {
            if(manStatus[i] == -1)
            {
                printf("Sorry, but %d is still single!\n", i);
                return 1; //True
            }
        }

答案 2 :(得分:1)

尽管出现了这段代码,但这两个陈述并未归为一类:

if(manStatus[i] == -1)
    printf("Sorry, but %d is still single!\n", i);
    return 1; //True

这实际上意味着你的函数每次都返回1 ....不依赖于if语句。

你真正想要的是:

 if(manStatus[i] == -1)
 {
     printf("Sorry, but %d is still single!\n", i);
     return 1; //True   ==> INSIDE the If-statement <==
 }

答案 3 :(得分:1)

此:

if(manStatus[i] == -1)
    printf("Sorry, but %d is still single!\n", i);
    return 1; //True

应该是:

if(manStatus[i] == -1) {
    printf("Sorry, but %d is still single!\n", i);
    return 1; //True
}

如果它不止一条线,需要有牙套。经验法则,总是把它们放进去。

答案 4 :(得分:0)

    int checkStatus(int manStatus[]) {

    int i;
    for(i = 0; i < ROWS; i++)
    {
        if(manStatus[i] == -1)
            printf("Sorry, but %d is still single!\n", i);
        return 1; //True
    }
    return 0; //False
    }

if条件中的问题..编译器将其读取为: 如果manStatus [i] == -1 printf(“string”),则返回1;

所以你弄乱了一个大括号,试试这个:

 int checkStatus(int manStatus[]) {

int i;
for(i = 0; i < ROWS; i++)
{
    if(manStatus[i] == -1)
    {
        printf("Sorry, but %d is still single!\n", i);
        return 1; //True
    }
}
return 0; //False
 }

并且当您在while循环中发送manStatus时,您只发送第一个元素而不是整个数组,因此“checkStatus”函数总是一遍又一遍地检查第一个元素。所以它返回相同的结果制作你之前拥有的无限循环。

希望有所帮助。