1

このコードに問題があります:

主要 :

#include <stdio.h>
#include <stdlib.h>
#include "Function.h"
int main()
{

int B[9]; 

saisie_B_M(&B[9]);

return 0;

}

Function.c

void saisie_B_M(int B[9])
{

int i;

for(i=0; i<8; i++)
{
    printf("Une cellule morte ayant %d voisins sera t-elle morte ou vivante à la génération suivante ? \n", i);
    scanf("%d", &B[i]);
        }
    }

function.h

#ifndef Function_H_INCLUDED
#define Function_H_INCLUDED
void saisie_B_M(int B[9]);
#endif // Function_H_INCLUDED

原理は単純で、9の配列であり、テーブルの各セルに値を返すだけです。しかし、最後にバグがあり、コンパイラがメッセージを表示しない理由がわかりません。

4

3 に答える 3

4

の答えを拡張@Miguel Przすると、最初の要素から始めたい場合は、配列の最初の要素への参照を渡す必要がありsaisie_B_M(&B[0])ますsaisie_B_M(B)

于 2013-02-05T22:51:03.810 に答える
4

問題は、関数を呼び出すときです

saisie_B_M(&B[9]);

そのはず

saisie_B_M(B);

最初のケースでは、配列を指定しますが、9 番目の offset から開始しB[9]ます。したがって、関数は 9 番目から 10 番目、11 番目、12 番目に反復を開始します... 動作は未定義です。

于 2013-02-05T22:48:56.967 に答える
2

C の配列はインデックスがゼロであるため、B[9] には 0..8 の範囲の要素があります。これは無効です:

saisie_B_M(&B[9]);

ポインターを最後の要素に渡したい場合は、次を使用する必要があります。

saisie_B_M(&B[8]);

しかし、完全な配列が必要なようですので、 &B[0] (または単に B) を saisie_B_M 関数に渡します。また、「for」ループを次のように変更する必要があります。

for(i=0; i<9; i++) {
/* ... */
}
于 2013-02-05T22:46:05.553 に答える