こんにちは、Mastermind のバージョンに取り組んでおり、ほぼ完成しています。フラグを入力すると答えが表示される「デバッグモード」を実装してみました。私の実装は、無限ループに陥っているため、非常に間違っています。問題は getGuess 関数にあります。修正または代替ソリューションに関する提案は大歓迎です
偉大な人々からの提案でコードを更新しました。しかし、実行すると、セグメンテーション エラー 11 が発生します。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#define CODELENGTH 4
#define NUMSYMBOLS 6
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 printMasterCode(int MasterCode[]){
int k;
for ( k = 0 ; k < 4; k++ ) {
printf( "%d ", MasterCode[ k ] );
printf("\n");
}
}
void getGuess (int guess[], int argc, char **argv, int MasterCode[])
{
int number = 0;
int j;
int k;
printf( "Please enter your list of 4 numbers between 1 and 6: " );
if (strcmp(argv[1], "-b") == 0) {
printf("Flag -b passed\n");
printMasterCode(MasterCode);
}
for ( j = 0 ; j < 4; j++ ) {
scanf( "%d", &number );
guess[ j ] = number;
}
printf( "The guess of " );
for ( k = 0 ; k < 4; k++ ) {
printf( "%d ", guess[ k ] );
}
printf( "\n" );
}
int main (int argc, char **argv)
{
srand ( time(NULL) );
int MasterCode[4];
int guess[ 4 ];
int exactMatch;
int closeMatch=0;
int exactResult;
int closeResult = 0;
genCode(MasterCode);
do {
getGuess(guess, argc, argv, MasterCode);
exactResult = checkExactMatches(MasterCode, guess, exactMatch);
closeResult = checkCloseMatches(MasterCode, guess, closeMatch);
printf("%d = Ending exactMatches \n", exactResult);
printf("%d = Ending closeMatches \n", closeResult);
} while (exactResult != CODELENGTH);
}
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[j] == guess[k]){
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[j] != guess[k])
printf("No CLOSE match \n");
}//end nested for loop
}//end for loop
return closeMatch;
} // end checkCloseMatches