如何在 c 中更改主/另一个函数内的全局结构的值?

Posted

技术标签:

【中文标题】如何在 c 中更改主/另一个函数内的全局结构的值?【英文标题】:how do i change values of a global struct inside main/another function in c? 【发布时间】:2021-12-23 20:38:11 【问题描述】:

所以我正在用 c 语言制作一个二十一点游戏,目的是为了好玩和练习编码。目前我设置它的方式不仅仅是为卡片创建一个变量,因为面卡具有相同的值并且ace有两个不同的可能值,我制作了一个结构来存储一些不同的参数和一个函数来改变说参数,但当我通过该功能传递卡时,它目前不会改变任何东西。以下是我的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdbool.h>


struct card 

int value;
char displayName;
bool changedName; //I did this to know whether to print as an int or char in the print statements
bool ace; //I did this because aces can be either 1 or 11 and I want to accommodate for that

;

int generateCards() 

int card = (rand() % 13) + 1;
return card;



//I have also tried making this return the struct card but nothing changes
void cleanUpCards(struct card cardInput) 

if (cardInput.value == 1) 
    cardInput.displayName = 'A';
    cardInput.changedName = true;
    cardInput.ace = true;

else if (cardInput.value == 11) 
    cardInput.displayName = 'J';
    cardInput.changedName = true;

else if (cardInput.value == 12) 
    cardInput.displayName = 'Q';
    cardInput.changedName = true;

else if (cardInput.value == 13) 
    cardInput.displayName = 'K';
    cardInput.changedName = true;


if (cardInput.changedName) 
    cardInput.value = 10;




int main() 

srand(time(NULL)); 


int selection;
int looping = 0;
while (looping != -1) 

    printf("Welcome to Blackjack! Please select an option below:");
    printf("\n==========================================================");
    printf("\n1. Play the game");
    printf("\n2. Exit");
    printf("\n\nYour choice: ");
    scanf("%d", &selection);

    //here is where the actual game starts
    if (selection == 1) 

        //I used a struct here to store both the value of the card and how to display it if it's over 10.
        struct card playerCard1, playerCard2, dealerCard1, dealerCard2;
        playerCard1.value = generateCards();
        playerCard2.value = generateCards();
        dealerCard1.value = generateCards();
        dealerCard2.value = generateCards();

        cleanUpCards(playerCard1);
        cleanUpCards(playerCard2);
        cleanUpCards(dealerCard2);
        cleanUpCards(dealerCard2);

        //This is just to check whether anything above 10 is displayed, and from this I can see that it isn't working... could be an issue with the print statement?
        printf("%d\t%d\n\n%d\t%d\n\n", playerCard1.value, playerCard2.value, dealerCard1.value, dealerCard2.value);

    
    else if (selection == 2) 
        break;
    



return 0;


【问题讨论】:

"bool ace; //我这样做是因为 ace 可以是 1 或 11,我想适应它" -- 你不知道,从值吗? 【参考方案1】:

您需要将结构作为指针传递,否则该函数将在结构的副本上运行。将签名更改为

void cleanUpCards(struct card *cardInput) 
   ...

并使用“->”而不是“.”访问 cardInput 的字段。另外,调用它

cleanUpCards(&playerCard1);
...

【讨论】:

所以这种工作...除了现在所有东西都显示 10,无论是什么值,除了庄家的第一张牌,它仍然可以显示其他值,包括高于 10 的值。不完全确定这是为什么发生这种情况时,我确保在函数中将所有内容更改为 -> 并在调用函数时使用 &(name of card)。 没关系,我通过用整数替换布尔值来让它工作,而一张没有改变的经销商卡是由于输入错误

以上是关于如何在 c 中更改主/另一个函数内的全局结构的值?的主要内容,如果未能解决你的问题,请参考以下文章

python 一个函数怎么使用另一个函数内的变量

如何在另一个模块中设置全局变量?

python 一个函数怎么使用另一个函数内的变量

c语言如何通过函数来改变已经赋初值的全局变量的值?

C语言中如何把结构体变量定义在主函数内,再调用一个自定义输入函数和输出函数

在c语言中子函数引用主函数中的值和引用主函数某个值的地址的区别