c - 段错误 11,寻找标志作为输入 - C

标签 c infinite-loop

您好,我正在开发 Mastermind 的一个版本,而且快完成了。我尝试实现“ Debug模式”,如果输入标志作为输入,它将显示答案。我的实现出了很大的问题,因为它陷入了无限循环。问题出在函数 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

最佳答案

您#define CODELENGTH,但随后在整个代码中使用魔数(Magic Number)(某些地方为 4,其他地方为 5)。使用#define 值,您将不再有无限循环(您需要输入 5 个数字才能工作)。

正如其他人所说:argv[0] 包含程序运行时的名称(甚至来自 Ed S. 的更多详细信息 - 也许没有)。您要查看的参数是 argv[1]。但请确保首先测试 argc,因为 argv[1] 不能保证存在! (如果 argc 为 0,则 argv[0] 也不是)。

关于c - 段错误 11,寻找标志作为输入 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792812/

相关文章:

node.js - setTimeout - JavaScript 堆内存不足

c - GTK:只读文本输入(类似标签)?

c - 为什么 mktime() 需要知道夏令时?

c - C 中的 JSON 序列化

c - 信息栏仅在窗口更改时显示

java - 此代码可能会导致无限循环吗?

javascript - 我正在使用 Brad Frost 的 3-up Carousel,我想让面板在到达终点时循环回到开头

c - 我的C语言程序可以编译,但是不产生任何输出

c - 无限循环会导致系统崩溃吗?

c - Switch 语句 C 中的无限循环