我尝试对 Hangman 游戏进行编程,但无法让它运行。编译工作,但是当我执行这个程序时,它不显示用于猜测字母的帮助数组... =(
游戏尚未完成,因为我无法让它工作。
我尝试将函数helpArrayFunc()
的数组helpArray
交给函数drawHelpArray()
,以便它可以显示帮助- 用于猜测字母的数组,但它不执行任何操作。
这里有什么错误?
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
//--- Function Prototypes ---
int * helpArrayFunc(char word[19][20],char,int *,int *,int *,int *);
void drawHelpArray(char word[19][20],int *,int *,int *);
void drawHangMan(int *);
char letterFunc();
int main()
{
// Wörter werden initialisiert
char word[19][20]={"Portal 2","Half-Life 2","Left 4 Dead 2","CS:GO","Rainbow Six","Fallout 4","Bioshock","Call of Duty","DayZ","H1Z1","Outlast","The Stanley Parable","Insurgency","Dying Light","Thief","Assasin's Creed","Wolfenstein","Payday 2","Need For Speed"};
// Zufallswort
int numWord=0;
srand(time(NULL));
numWord=rand() % 19;
// Wortlänge
int wordLength = strlen(word[numWord]);
// Fehler
int mistakes=0;
// HilfsArray
int helpArray[wordLength];
helpArray[wordLength]=0;
// Buchstabe
char letter;
//printf("%s\n\n",word[numWord]); Only for testing
do
{
drawHangMan(&mistakes);
*helpArray=helpArrayFunc(word,letter,helpArray,&mistakes,&numWord,&wordLength);
drawHelpArray(word,helpArray,&numWord,&wordLength);
letter=letterFunc();
system("cls");
}
while(mistakes<11);
printf("\n\n___________________________\n\n");
printf(" Copyright\xA9 Thomas Sapelza\n");
printf("___________________________\n\n");
system("PAUSE");
return 0;
}
int * helpArrayFunc(char word[19][20],char letter,int *mistakes,int *helpArray,int *numWord,int *wordLength)
{
bool mistake=false;
// Buchstaben überprüfen ob er im Wort enthalten ist
for(int i=0;i<(*wordLength);i++)
{
if(letter==word[*numWord][i])
{
helpArray[i]=1;
return helpArray;
}
else
{
helpArray[i]=0;
mistake=true;
}
}
// Auf fehler überprüfen
if(mistake) *mistakes++;
}
void drawHelpArray(char word[19][20],int *helpArray,int *numWord,int *wordLength)
{
// Zeichen die im HilfsArray immer angezeigt werden sollen
char space='\x20',dash='\x2D',comma='\x27',colon='\x3A';
// HilfsArray darstellen
for(int i=0;i<(*wordLength);i++)
{
// Wenn der Wert von helpArray auf 1 ist wird der Buchstabe angezeigt
if(helpArray[i]==1)
{
printf("%c ",word[*numWord][i]);
}
// Wenn der Wert von helpArray auf 0 ist wird ein Zeichen dargestellt
if(helpArray[i]==0)
{
// Zeichen die immer enthalten sein sollen bzw.
if(word[*numWord][i]==space)
{
printf(" ");
}
else if(word[*numWord][i]==dash)
{
printf("- ");
}
else if(word[*numWord][i]==comma)
{
printf("' ");
}
else if(word[*numWord][i]==colon)
{
printf(": ");
}
else
{
printf("_ ");
}
}
}
printf("\n\n");
}
char letterFunc() // Buchstabe einlesen
{
char letter;
printf("\nGeben Sie ein Buchstabe ein: ");
fflush(stdin);
scanf("%c",&letter);
return letter;
}
void drawHangMan(int *mistakes)
{
switch(*mistakes)
{
case 0:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("____________\n\n");
break;
case 1:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf("\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf("__|_________\n\n");
break;
case 2:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf("__|_________\n\n");
break;
case 3:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf("__|_________\n\n");
break;
case 4:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/ | \n");
printf(" | O \n");
printf(" |\n");
printf(" |\n");
printf(" |\n");
printf("__|_________\n\n");
break;
case 5:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/ | \n");
printf(" | O \n");
printf(" | |\n");
printf(" | |\n");
printf(" |\n");
printf("__|_________\n\n");
break;
case 6:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/ | \n");
printf(" | O \n");
printf(" | \\|\n");
printf(" | | \n");
printf(" |\n");
printf("__|_________\n\n");
break;
case 7:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/ | \n");
printf(" | O \n");
printf(" | \\|/\n");
printf(" | | \n");
printf(" |\n");
printf("__|_________\n\n");
break;
case 8:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/ | \n");
printf(" | O \n");
printf(" | \\|/\n");
printf(" | | \n");
printf(" | /\n");
printf("__|_________\n\n");
break;
case 9:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/ | \n");
printf(" | O \n");
printf(" | \\|/\n");
printf(" | | \n");
printf(" | / \\\n");
printf("__|_________\n\n");
break;
case 10:
printf("\n\nFalsche Buchstaben: %d\n\n",*mistakes);
printf(" _______\n");
printf(" |/ | \n");
printf(" | X \n");
printf(" | \\|/\n");
printf(" | | \n");
printf(" | / \\\n");
printf("__|_________\n\n");
break;
}
}
最佳答案
How to assign a function output (array) to another function in c?
C 函数无法输出(返回)数组。此外,在 helpArrayFunc()
中,helpArray
不是一个数组,而是一个指向 int
的指针。不过,您不需要该函数返回数组,因为它对来自 main()
的原始 int helpArray[wordLength]
进行操作 - 它对数组内容通过参数 int *helpArray
引用原始数组,因此您可以在 中删除错误的赋值
并声明为 *helpArray=
(它引用第一个数组元素) >main()void helpArrayFunc(...)
。因此,drawHelpArray()
接收到的原始数组地址与 helpArrayFunc()
留下的值相同 - 如果它们仍然错误,则为 helpArrayFunc()
> 的错。
另请注意,您混淆了调用中 helpArray
和 mistakes
的顺序以及 helpArrayFunc()
的定义。
关于c - 如何将函数输出(数组)分配给c中的另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212096/