c - 如何将函数输出(数组)分配给c中的另一个函数?

标签 c arrays function pointers

我尝试对 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() > 的错。
另请注意,您混淆了调用中 helpArraymistakes 的顺序以及 helpArrayFunc() 的定义。

关于c - 如何将函数输出(数组)分配给c中的另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212096/

相关文章:

c - 如何在C中定义用户输入的仅4个字符

c - 使用 C 使用分而治之法查找数组中的多数元素

c - Unix 中的内存映射 I/O

c++ - 我必须删除 C++ 中的静态数组吗?

C++在类中使用函数时出错

javascript - HTML5 Canvas 调用同一个函数两次?

c - 具有灵活数组成员的结构数组如何表现?

javascript - JS 中的数组 - 表示它是对象

c - 将整数分配给数组会导致垃圾

java - 我的示例应用程序使用了多少 SDK 的 API