C 如何在处理方法中获得一致的变量值?

C 如何在处理方法中获得一致的变量值?,c,struct,attributes,global-variables,local-variables,C,Struct,Attributes,Global Variables,Local Variables,我对C比较陌生,为了好玩,我决定创建一个游戏,用户可以选择一个类来对付敌人。我创建了一个函数,允许用户增加他们的属性,如力量、速度、智力和健康。如果用户选择从他们使用的任何类中提升其中一个属性,我将如何启用此更改,以便它继续应用到游戏中的其他方法/级别 还要注意的是,类是作为结构组成的,所以我想我是在问如何修改结构属性并将这些更改应用到下一个方法\级别。最后一件事,健康不是结构属性之一,我将其标记为全局变量。我是故意这么做的,因为我不知道如何控制这个属性 struct type { in

我对C比较陌生,为了好玩,我决定创建一个游戏,用户可以选择一个类来对付敌人。我创建了一个函数,允许用户增加他们的属性,如力量、速度、智力和健康。如果用户选择从他们使用的任何类中提升其中一个属性,我将如何启用此更改,以便它继续应用到游戏中的其他方法/级别

还要注意的是,类是作为结构组成的,所以我想我是在问如何修改结构属性并将这些更改应用到下一个方法\级别。最后一件事,健康不是结构属性之一,我将其标记为全局变量。我是故意这么做的,因为我不知道如何控制这个属性

struct type
{
    int strength;
    int intellect;
    int speed;
};

//method that allows user to upgrade their given attributes by one
int promote(){
    int increase;
    printf("Please an attribute to power up.\n1.Strength\n2.Intelligence\n3.Speed\n4.Health\n");
    scanf("%d", &increase);
    switch(increase){
        case 1:
        printf("You strength is now at %d\n", );//Not sure what to put here
        break;
    }
可能性1: 使用全局变量(易于实现,但不是最好的) 您需要创建一个结构实例,就像为健康创建变量一样。既然您将其创建为全局,那么您也可以将其创建为全局

所以在结构定义之后添加

struct type player_attributes;
这些属性需要在游戏开始时的某个地方初始化,就像在main中一样

player_attributes.strength = 10;
player_attributes.intellect = 10;
player_attributes.speed = 10;
现在,无论你在哪里需要这些,你都可以把它们读作
strength=player\u attributes.strength

终于来更新了-

在您的案例陈述中,您可以添加

 case 1:
 player_attributes.strength += 5;
 printf("You strength is now at %d\n", player_attributes.strength
 break;
其他属性也是如此。 如果所有级别的代码都在相同的
c
文件(模块)中,那么您还必须确保属性可以通过所有级别访问,使其成为全局的就足够了

如果要在不同的文件中编写不同级别的代码,则需要添加

extern struct type player_attributes;
到其他文件的顶部。还要确保他们可以看到结构类型定义

这可以通过将结构定义和外部行添加到头文件并将其包含在所有模块中来实现

可能性2: 使用指向正在传递的结构的指针(绝对是建议的,因为允许轻松缩放) 话虽如此,@JonathanLeffler也提出,使用globals通常不是一个好主意

您真正应该做的是在游戏开始的本地范围(函数)中创建player_属性的实例。然后,所有函数都应该将指向
struct type
的指针作为参数。这样他们就可以读写数据了

在您的情况下,您的功能
promote
将变为-

int promote(struct type *attrib){
    int increase;
    printf("Please an attribute to power up.\n1.Strength\n2.Intelligence\n3.Speed\n4.Health\n");
    scanf("%d", &increase);
    switch(increase){
        case 1:
        attrib->strength += 5;
        printf("You strength is now at %d\n", attrib->strength);
        break;
        // Other cases here.
    }
}
然后您可以调用promote as

promote(&player_attributes);
从定义它的
main

这还允许您轻松地同时创建更多玩家,并且相同的函数可以处理所有玩家的属性

我希望这能有所帮助。

可能性1: 使用全局变量(易于实现,但不是最好的) 您需要创建一个结构实例,就像为健康创建变量一样。既然您将其创建为全局,那么您也可以将其创建为全局

所以在结构定义之后添加

struct type player_attributes;
这些属性需要在游戏开始时的某个地方初始化,就像在main中一样

player_attributes.strength = 10;
player_attributes.intellect = 10;
player_attributes.speed = 10;
现在,无论你在哪里需要这些,你都可以把它们读作
strength=player\u attributes.strength

终于来更新了-

在您的案例陈述中,您可以添加

 case 1:
 player_attributes.strength += 5;
 printf("You strength is now at %d\n", player_attributes.strength
 break;
其他属性也是如此。 如果所有级别的代码都在相同的
c
文件(模块)中,那么您还必须确保属性可以通过所有级别访问,使其成为全局的就足够了

如果要在不同的文件中编写不同级别的代码,则需要添加

extern struct type player_attributes;
到其他文件的顶部。还要确保他们可以看到结构类型定义

这可以通过将结构定义和外部行添加到头文件并将其包含在所有模块中来实现

可能性2: 使用指向正在传递的结构的指针(绝对是建议的,因为允许轻松缩放) 话虽如此,@JonathanLeffler也提出,使用globals通常不是一个好主意

您真正应该做的是在游戏开始的本地范围(函数)中创建player_属性的实例。然后,所有函数都应该将指向
struct type
的指针作为参数。这样他们就可以读写数据了

在您的情况下,您的功能
promote
将变为-

int promote(struct type *attrib){
    int increase;
    printf("Please an attribute to power up.\n1.Strength\n2.Intelligence\n3.Speed\n4.Health\n");
    scanf("%d", &increase);
    switch(increase){
        case 1:
        attrib->strength += 5;
        printf("You strength is now at %d\n", attrib->strength);
        break;
        // Other cases here.
    }
}
然后您可以调用promote as

promote(&player_attributes);
从定义它的
main

这还允许您轻松地同时创建更多玩家,并且相同的函数可以处理所有玩家的属性


我希望这会有所帮助。

在逗号之后,您可以放置要打印的内容。运行状况可能是
结构类型中的另一个属性。尽可能避免使用全局变量。您可以传递一个指向周围结构的指针,并在更改强度、智力、速度、健康度等值时使用该指针。在逗号之后,您可以放置要打印的内容。健康度可能是
结构类型中的另一个属性。尽可能避免使用全局变量。您可以传递一个指向周围结构的指针,并在更改力量、智力、速度、健康等值时使用该指针。