如何在 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 中更改主/另一个函数内的全局结构的值?的主要内容,如果未能解决你的问题,请参考以下文章