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

このコードのように見えますが、2 つのステートメントはグループ化されていません。

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 に答える