【问题标题】:C Program calling array containing strings within a loopC程序在循环中调用包含字符串的数组
【发布时间】:2015-04-21 14:17:03
【问题描述】:

我是 C 的新手,我的数组有问题。 该应用程序是一个字谜游戏,应将用户猜测与正确的单词进行比较。 我正在尝试在两个单独的数组中记录所有不正确的答案以及答案的正确版本。 但是,在程序结束时,当我尝试打印所有不正确的猜测和正确的版本时,它只打印数组中的第一项。 我认为这可能是由数组引起的问题,因为它们包含字符串,所以在 C 中它本质上是我认为的数组中的数组? 为什么我的代码只打印数组中的第一项?

(代码比较多,不过这只是关键部分,我认为这是唯一需要看的部分)

char correctWord[20];
char anagramWord[20];
int  guesses, score;
char* incorrectGuess[20];
char* correctVersion[20];

void userGuess(){
char userWordGuess[20];

printf("Anagram: ");
printf(anagramWord);
printf("\n Your Guess: ");
scanf("%s",userWordGuess); //Reads in user input
strtok(correctWord, "\n");
guesses++;

if(strcmp(userWordGuess, correctWord) == 0){
    printf("Congratulations, you guessed correctly! (Please wait for the 

next question...)\n");
        score++;
        Sleep(1600);
        system("cls");
    }else{
        printf("Incorrect, try harder!(Please wait for the next question...) \n");
        Sleep(1600);
        system("cls");
        int i = 0;
        incorrectGuess[i]=(userWordGuess);
        correctVersion[i]=(correctWord);
        i++;
    }
}

void finalScore(){
    int i;
    system("cls");
    int percentage = ((score/guesses) * 100);
    printf("Congratulations - Game Complete!");
    printf("\n Guesses: %d", guesses);
    printf("\n Score: %d", score);
    printf("\n Percentage Correct: %d", percentage);
    int numberOfIncorrect = (guesses-score);
    for(i=0;i<=numberOfIncorrect;i++){
        printf(incorrectGuess[i]);
        printf(correctVersion[i]);
    }
    getch();
}

【问题讨论】:

  • 您没有使用任何值初始化 guessesscore
  • 您需要启用所有编译器警告。

标签: c arrays string for-loop iteration


【解决方案1】:

在此代码中,您没有使用任何值初始化 guessesscore,而是尝试递增它们。你应该有

int  guesses = 0 , score = 0 ;

然后,在你的 else 块中

else
{
    printf("Incorrect, try harder!(Please wait for the next question...) \n");
    Sleep(1600);
    system("cls");
    int i = 0;                             // you initialize i to 0 every time
    incorrectGuess[i]=(userWordGuess);
    correctVersion[i]=(correctWord);
    i++;
}

在注释行中,您每次将i 初始化为0

【讨论】:

    【解决方案2】:

    起初,变量guessesscore 没有初始化。你需要类似的东西

    int  guesses=0, score=0;
    

    在这几行

    incorrectGuess[i]=(userWordGuess);
    correctVersion[i]=(correctWord);
    

    你不复制字符串。你应该使用

    incorrectGuess[i]=strdup(userWordGuess);
    correctVersion[i]=strdup(correctWord);
    

    相反。或者你可以像这样使用mallocstrcpy

    incorrectGuess[i] = malloc(strlen(userWordGuess)+1);
    strcpy(incorrectGuess[i], userWordGuess);
    correctVersion[i] = malloc(strlen(correctWord)+1);
    strcpy(correctVersion[i], correctWord);
    

    在这种情况下,最后你需要像这样释放分配的内存

    free(incorrectGuess[i]);
    free(correctVersion[i]);
    

    【讨论】:

      【解决方案3】:

      这个:

      incorrectGuess[i]=(userWordGuess);
      

      错误,字符串没有被复制。您所做的只是存储一个指向保存当前猜测的数组的指针,并且该数组始终相同。

      您需要将实际字符复制到新分配的内存中以记住它们。您也可以将其设为二维数组:

      char incorrectGuess[20][100];
      

      只有strcpy() 是当前的猜测。请注意不要覆盖,如果有,请使用snprintf()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多