C 程序在循环中调用包含字符串的数组
C Program calling array containing strings within a loop
我是 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();
}
在此代码中,您没有使用任何值初始化 guesses
和 score
,而是尝试递增它们。你应该
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
。
起初,变量 guesses
和 score
没有初始化。你需要像
这样的东西
int guesses=0, score=0;
在这一行
incorrectGuess[i]=(userWordGuess);
correctVersion[i]=(correctWord);
你没有复制字符串。你应该使用
incorrectGuess[i]=strdup(userWordGuess);
correctVersion[i]=strdup(correctWord);
相反。或者你可以像这样使用 malloc
和 strcpy
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]);
这个:
incorrectGuess[i]=(userWordGuess);
错误,字符串没有被复制。您所做的只是存储一个指向保存当前猜测的数组的指针,并且该数组始终相同。
您需要将实际字符复制到新分配的内存中才能记住它们。您还可以将其设为二维数组:
char incorrectGuess[20][100];
并且只是 strcpy()
当前的猜测。当心,以免覆盖,如果有,请使用 snprintf()
。
我是 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();
}
在此代码中,您没有使用任何值初始化 guesses
和 score
,而是尝试递增它们。你应该
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
。
起初,变量 guesses
和 score
没有初始化。你需要像
int guesses=0, score=0;
在这一行
incorrectGuess[i]=(userWordGuess);
correctVersion[i]=(correctWord);
你没有复制字符串。你应该使用
incorrectGuess[i]=strdup(userWordGuess);
correctVersion[i]=strdup(correctWord);
相反。或者你可以像这样使用 malloc
和 strcpy
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]);
这个:
incorrectGuess[i]=(userWordGuess);
错误,字符串没有被复制。您所做的只是存储一个指向保存当前猜测的数组的指针,并且该数组始终相同。
您需要将实际字符复制到新分配的内存中才能记住它们。您还可以将其设为二维数组:
char incorrectGuess[20][100];
并且只是 strcpy()
当前的猜测。当心,以免覆盖,如果有,请使用 snprintf()
。