C:在单独的函数中操作结构

时间:2014-01-20 18:55:50

标签: c struct

我不确定这是否适合这种论坛,因为这是一个非常具体的问题,但无论如何我都会问。

我有三个文件:

  1. main.c
  2. functions.c
  3. functions.h
  4. functions.cfunctions.h我创建了struct,并将其定义为名为control的类型:

    typedef struct
    {
        char cUp, cLeft, cDown, cRight
    } control;
    

    我创建了control的实例,并在Keys的开头初始化了名为main.c的实例:

    #include <stdio.h>
    #include <stdlib.h>
    #include "functions.h"
    
    int main()
    {
        control Keys = {'w', 'a', 's', 'd'};
    
        //...
    }
    

    我将Keys传递给名为options_f的函数,该函数以control作为参数并返回control。函数原型放在functions.h

    //in functions.h:
    control options_f(control Keys);
    
    //in main.c:
    Keys = options_f(Keys);
    

    options_f位于functions.c,如下所示:

    control options_f(control Keys)
    {
        system("cls");
    
        printf("\nENTER | Place your symbol.\n\n1| %c |Move up.\n\n2| %c |Move left.\n\n3| %c  |Move down.\n\n4| %c |Move right.\n", Keys.cUp, Keys.cLeft, Keys.cDown, Keys.cRight);
        printf("\n\nTo change the keys: NUMBER,SYMBOL (enter 0 to return to menu).\n\n");
    
        int iTemp = 0;
        char cTemp = '\0';
        scanf("%i,%c", &iTemp, &cTemp);
    
        switch(iTemp)
        {
            case 0:
                break;
            case 1:
                Keys.cUp = cTemp;
                Keys = options_f(Keys);
                break;
            case 2:
                Keys.cLeft = cTemp;
                Keys = options_f(Keys);
                break;
            case 3:
                Keys.cDown = cTemp;
                Keys = options_f(Keys);
                break;
            case 4:
                Keys.cRight = cTemp;
                Keys = options_f(Keys);
                break;
            default:
                printf("Please enter a number from 1-4.");
                stop_f(2);
                options_f(Keys);
                break;
        }
    }
    

    该功能允许我更改Keys中字符的内容。输入0并返回菜单后,我再次致电options_f。只有它将Keys个字符中存储的值更改为一些垃圾值。

    为什么?

    如果您需要有关我使用的其他功能的更多信息,请询问 我很抱歉,如果这对你来说看起来非常低级和愚蠢,但我正在努力学习,这就是我要问的原因。

    谢谢:)

1 个答案:

答案 0 :(得分:4)

您需要从options_f()函数返回一个值(可能是return Keys;)。这甚至不是有效的C代码。