C:在单独的函数中操作结构
我不确定这是否适合这种论坛,因为这是一个非常具体的问题,但我还是要问 我有三个文件:C:在单独的函数中操作结构,c,struct,C,Struct,我不确定这是否适合这种论坛,因为这是一个非常具体的问题,但我还是要问 我有三个文件: main.c functions.c functions.h 在functions.c和functions.h中,我创建了一个struct,并将其定义为一个名为control的类型: typedef struct { char cUp, cLeft, cDown, cRight } control; 我创建了control的一个实例,并在main.c的开头初始化了名为Keys的实例: #include
main.c
functions.c
functions.h
functions.c
和functions.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'};
//...
}
options\u 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;
}
}
该功能允许我更改键
中字符的内容。输入0
并返回菜单后,我再次调用options\u f
。只有它将存储在键
字符中的值更改为一些垃圾值
为什么呢
如果您需要有关我使用的其他功能的更多信息,请询问。我很抱歉,如果这对你来说是非常低级和愚蠢的,但我正在努力学习,这就是为什么我要问
谢谢:)您需要从
options\u f()
函数返回一个值(可能是返回键;
)。这甚至不是有效的C代码。您需要从options\u f()
函数返回一个值(可能是返回键;
)。这甚至不是有效的C代码。对!老兄,我完全错过了^^非常感谢!正确的!老兄,我完全错过了^^非常感谢!只需将键作为指针传入即可void options\u f(control*keys){…}
并像options\u f(&keys)一样调用它代码>除了速度之外,作为指针传递它有什么好处吗?这只是逻辑上的一个区别。使用controloptions\u f(control keys)
读取(对我来说)为options\u f
使用keys
创建一个新的控件,而void options\u f(control*keys)
读取的内容更多,因为options\u f
修改keys
。只需将keys
作为指针传入即可void options\u f(control*keys){…}
并像options\u f(&keys)一样调用它代码>除了速度之外,作为指针传递它有什么好处吗?这只是逻辑上的一个区别。使用controloptions\u f(控制键)
读取(对我来说)为options\u f
使用键
创建新的控件
,而void options\u f(控制键)
读取的内容更多,因为选项
修改键
。
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;
}
}