簡體   English   中英

C:在單獨的函數中操作結構

[英]C: Manipulating structs in separate functions

我不確定這是否適合此類論壇,因為這是一個非常具體的問題,但是我還是會問。

我有三個文件:

  1. main.c
  2. functions.c
  3. functions.h

functions.cfunctions.h我創建了一個struct ,並將其定義為一種稱為control的類型:

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

我創建了一個control實例,並在main.c的開頭立即初始化了一個稱為Keys的實例:

#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字符中的值更改為某些垃圾值。

這是為什么?

如果您需要有關我使用的其他功能的更多信息,請詢問。
很抱歉,這對您來說太低了,太愚蠢了,但是我正在嘗試學習,這就是為什么我要問。

謝謝 :)

您需要從options_f()函數返回一個值(可能return Keys; )。 這甚至不是有效的C代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM