2

您好,我正在开发一个生成主代码的快速程序,用户必须猜测代码。在检查用户的猜测时,我使用 2 个函数,一个用于精确匹配,另一个用于紧密匹配(他们得到一个在主代码中但不在正确位置的数字)

前任。主码 1 2 3 4

user 2 3 2 4 输出应该显示用户有 2 个紧密匹配和一个完全匹配。我无法理解如何正确返回 int。

当我尝试在 Main 中打印它们时,我的输出只显示了 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);

result 现在将保存函数返回的值。

于 2012-10-08T19:37:03.637 回答
3

你需要做的是

  • 不将计数参数传递给函数并且
  • 而是在count中收集函数的返回值

所以

checkExactMatches(MasterCode, guess, exactMatch);

变成

exactMatch = checkExactMatches(MasterCode, guess);

您需要对函数头进行适当的更改,并避免使用全局变量。

于 2012-10-08T19:38:42.077 回答
1

请注意,虽然数组是通过指针传递的(意味着函数可以修改指向的指针),但整数是通过值传递的。因此,函数内对 int 的更改仅在函数执行期间持续存在。

你想用

exactMatch = checkExactMatches(MasterCode, guess);

在这种情况下,您将不必再通过exactMatch

于 2012-10-08T19:36:54.600 回答
1

C 通过值而不是通过引用传递参数,因此传递int exactmatch给函数会创建内部数据的副本exactmatch,因此在方法内部完成的操作不会做任何事情。

你想要做的是从参数列表中删除精确匹配,而是将其分配为零(int exactmatch=0;在方法的开头,从全局变量中删除精确匹配,并使用类似的东西int resultExact = checkExactMatches(MasterCode, guess);作为你的函数调用。你已经返回了答案正确,您只是不会在任何地方找到答案。

于 2012-10-08T19:38:14.590 回答