1

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

#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++;
    }
}
4

5 回答 5

2

在你的情况下,你需要一个花括号,这里:

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

没有which将始终返回true(返回 1),因此会在您的.main()

于 2013-10-28T03:47:08.470 回答
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
            }
        }
于 2013-10-28T03:47:23.740 回答
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 <==
 }
于 2013-10-28T03:46:53.473 回答
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
}

如果它不止一行,则需要有大括号。经验法则,总是把它们放进去。

于 2013-10-28T03:47:28.590 回答
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 条件中的问题.. 编译器将其读取为: if manStatus[i] == -1 printf("string") else return 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”函数总是一遍又一遍地检查第一个元素..所以它一遍又一遍地返回相同的结果..制作你之前的无限循环。

希望有帮助。

于 2013-10-28T04:23:57.400 回答