2

こんにちは、マスター コードを生成する簡単なプログラムに取り組んでおり、ユーザーはコードを推測する必要があります。ユーザーの推測を確認するとき、完全一致用と近似一致用の 2 つの関数を使用します (マスターコードにあるが正しい場所にない番号を取得した場合)。

元。マスターコード 1 2 3 4

user 2 3 2 4 出力は、ユーザーが 2 つの近似一致と 1 つの完全一致を持っていることを示しているはずです。int を正しく返す方法がわかりません。

私の出力には、メインで印刷しようとすると、exactMatch と closeMatch のデフォルト値が表示されます。どんな洞察も大歓迎です。ありがとうございました。

 #include<stdio.h>
 #include<math.h>
 #include<stdlib.h>
 #include<time.h>
 #define CODELENGTH 4
 #define NUMSYMBOLS 6


 int MasterCode[4];
 int guess[ 4 ];
 int exactMatch;
 int closeMatch=0;

 void genCode (int MasterCode[])
{
int i=0;
int k;
while (i < CODELENGTH){

MasterCode[i] =rand() %NUMSYMBOLS +1;
    i++;

}//end while loop.
for ( k = 0 ; k < 4; k++ ) {
    printf( "%d ", MasterCode[ k ] );
}

printf( "\n" );
}





 void getGuess (int guess[])
{

int number = 0;

printf( "Please enter your list of 4 numbers between 1 and 6: " );
int j;
int k;
for ( j = 0 ; j < 4; j++ ) {
    scanf( "%d", &number );
    guess[ j ] = number;
}

printf( "Your array has these values: " );

for ( k = 0 ; k < 4; k++ ) {
    printf( "%d ", guess[ k ] );
}

printf( "\n" );
 }




 int main (int argc, char **argv)
 {
srand ( time(NULL) );

genCode(MasterCode);
getGuess(guess);
checkExactMatches(MasterCode, guess, exactMatch);
checkCloseMatches(MasterCode, guess, closeMatch);
printf("%d = Ending exactMatches \n", exactMatch);
printf("%d  = Ending closeMatches \n", closeMatch);





 }
 int checkExactMatches (int MasterCode[], int guess[], int exactMatch )
  {
int woot;
for(woot=0; woot<4; woot++){


        if (MasterCode[woot] == guess[woot]){
            printf("Exact Match found \n");
            exactMatch ++;
            printf( "%d = Guess \n" , guess[ woot ]);
            printf( "%d = MasterCode \n", MasterCode[ woot ]);
            printf("%d = exactMatch \n", exactMatch);

        }// end if

        if (MasterCode[woot] != guess[woot])
            printf("No EXACT match \n");


}//end for loop

return exactMatch;
 } // end checkExactMatches



 int checkCloseMatches (int MasterCode[], int guess[], int closeMatch )
  {
int k;
int j;
for(k=0; k<4; k++){

    for (j=0; j<4; j++) {


        if (MasterCode[k] == guess[j]){
    printf("CLOSE Match found \n");
    closeMatch ++;
    printf( "%d = Guess \n" , guess[ j ]);
    printf( "%d = MasterCode \n \n", MasterCode[ k ]);
    printf("%d = closeMatch \n \n", closeMatch);

}// end if

if (MasterCode[k] != guess[j])
    printf("No CLOSE match \n");


    }//end nested for loop
}//end for loop

return closeMatch;
 } // end checkCloseMatches
4

4 に答える 4

3

関数から返される値を取得することは実際には非常に簡単です。それは基本的に変数に値を割り当てることと同じです。あなたの場合、構文は次のようになります。

int result = checkExactMatches(MasterCode, guess, exactMatch);

結果は、関数によって返される値を保持するようになりました。

于 2012-10-08T19:37:03.637 に答える
3

あなたがする必要があるのは

  • count 引数を関数に渡さず、
  • 代わりに、カウントで関数の戻り値を収集します

そう

checkExactMatches(MasterCode, guess, exactMatch);

になる

exactMatch = checkExactMatches(MasterCode, guess);

関数ヘッダーに適切な変更を加え、グローバル変数を使用しないようにする必要があります。

于 2012-10-08T19:38:42.077 に答える
1

配列はポインターによって渡されますが(つまり、関数はポイントされたポインターを変更できます)、intは値によって渡されることに注意してください。したがって、関数内のintへの変更は、関数の期間中のみ持続します。

使いたい

exactMatch = checkExactMatches(MasterCode, guess);

その場合、もう渡す必要はありませんexactMatch

于 2012-10-08T19:36:54.600 に答える
1

C は引数を参照ではなく値で渡すためint exactmatch、関数に渡すと 内にデータの複製が作成されるexactmatchため、メソッド内で行われた操作は何もしません。

やりたいことは、引数リストからexactmatchを削除し、代わりにゼロとして割り当てます(int exactmatch=0;メソッドの先頭で、グローバル変数からexactmatchを削除int resultExact = checkExactMatches(MasterCode, guess);し、関数呼び出しのようなものを使用します。すでに答えを返しています正しく、その答えはどこにもありません。

于 2012-10-08T19:38:14.590 に答える