您好我正在开发一个生成主代码的快速程序,用户必须猜测代码。当检查用户的猜测时,我使用2个函数用于精确匹配,另一个用于紧密匹配(其中他们得到的数字在主代码中但不在正确的位置)
实施例。主码1 2 3 4
用户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
答案 0 :(得分:3)
获取函数返回的值实际上非常简单,它与为变量赋值基本相同。在您的情况下,语法将是这样的:
int result = checkExactMatches(MasterCode, guess, exactMatch);
结果现在将保存函数返回的值。
答案 1 :(得分:3)
您需要做的是
所以
checkExactMatches(MasterCode, guess, exactMatch);
变为
exactMatch = checkExactMatches(MasterCode, guess);
您需要对函数头进行适当的更改,并避免使用全局变量。
答案 2 :(得分:1)
请注意,虽然数组是通过指针传递的(意味着函数可以修改指向指针),但是按值传递整数。因此,函数中int的更改仅在函数持续时间内持续。
您想要使用
exactMatch = checkExactMatches(MasterCode, guess);
在这种情况下,您不必再传递exactMatch
。
答案 3 :(得分:1)
C通过值而不是引用传递参数,因此将int exactmatch
传递给函数会在exactmatch
内创建数据的副本,因此在方法内部执行的操作不会执行任何操作。 / p>
您要做的是从参数列表中删除完全匹配,而是将其指定为零(int exactmatch=0;
在方法的开头,从全局变量中删除完全匹配,并使用类似{{1}的内容你的函数调用。你已经正确地回答了答案,你只是在任何地方都没有回答。