gpt4 book ai didi

在 C 函数内创建全局堆栈变量

转载 作者:行者123 更新时间:2023-11-30 19:51:25 25 4
gpt4 key购买 nike

我正在尝试编写终端二十一点游戏,我是 C 编程新手

我想做的是在一个函数内创建一个全局堆栈,我可以将所有洗过的牌(52 张牌)一张一张地插入其中。然后,每个玩家都可以 pop() 一两张牌.. 堆栈中的牌数会减少..

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "stack.h"

/* *********************************************************************** */
/* STACK DATASTRUCTURE */
/* *********************************************************************** */

int stack[52];
void push();
int pop();
void traverse();
int is_empty();
int top_element();
int top = 0;


void push(int value) {
stack[top] = value;
top++;
}

int pop() {
top--;
return stack[top];
}

void traverse() {
int d;

if (top == 0) {
printf("Stack is empty.\n\n");
return;
}

printf("There are %d elements in stack.\n", top);

for (d = top - 1; d >= 0; d--)
printf("%d\n", stack[d]);
printf("\n");
}

int is_empty() {
if (top == 0)
return 1;
else
return 0;
}

int top_element() {
return stack[top-1];
}



/* *********************************************************************** */
/* MY FUNCTIONS */
/* *********************************************************************** */


void FYshuffle (int *array, int len) {
int i, tmp, x;
for (i=len-1; i>1; i--) {
x = rand()%i;
if (x==i) continue;
/* now swap */
tmp = array[i];
array[i] = array[x];
array[x] = tmp;
}
}

int shuffleCards(void) {
int i;
int c = 0;
int cards[52] = {1, 2, 3, 4, 5, 6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52};
int deck[52];

srand(time(0));
FYshuffle(cards,52);

for (i=0; i<52;i++) {
push(cards[i]); <<<<<<<<<<<<< HERE'S THE PROBLEM, ITS JUST LOCAL STACK! I NEED IT TO BE GLOBAL
int element;
element = pop();
printf("Element removed from stack is %d.\n", element);
}

for (i=0;i<52;i++) {
deck[i] = cards[i];
printf("%d", deck[c]);
printf("%s", " ");
c++;
}
return 0;
/* return deck; */
}


/* recognize suits */
int recognizeSuit(int num) {
int suite;
suite = num / 13;
switch(suite) {
case 0 :
printf("Clubs ");
break;
case 1 :
printf("Diamonds ");
break;
case 2 :
printf("Hearts ");
break;
case 3 :
printf("Spades ");
break;

default :
printf("Error ");
}
}

/* recognize the number */
int recognizeNumber(int num) {
/* recognize the suit */
int number;
number = num % 13 + 1;
switch(number) {
case 1 :
printf("ACE ");
break;
case 11 :
printf("JACK ");
break;
case 12 :
printf("QUEEN ");
break;
case 13 :
printf("KING ");
break;

default :
printf("%d ", number);
}
}


int main(void) {
shuffleCards();
printf(" - ");
recognizeNumber(2);
recognizeSuit(2);


return 0;
}

我只是在代码中写了一个注释来向大家展示问题,我该如何解决它?因为当我检查主堆栈时,它是空的..

非常感谢您的帮助!祝你有美好的一天!

最佳答案

您在代码中实际提到的问题不正确。您声明的堆栈已经是全局堆栈,因为您在全局范围内定义了它。

您可以直接测试它。这是一个名为 pushGlobalStack() 的函数,您可以在其中将值推送到函数内。然后,为了检查堆栈是否是全局的,请在 main 而不是 pushGlobalStack() 函数中弹出值。您可以检查值是否完全相同。

void PushGlobalStack(){

int cards[52] = {11, 22, 51, 4, 5, 41 ,7 ,8 ,9 ,10 ,1 ,2 ,13 ,14 ,15 ,16 ,17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 6, 42, 43, 44, 45, 46, 47,
48, 49, 50, 4, 3};

for(int i=0; i<52;i++) {

push(cards[i]);
}
}

int main(void) {

//shuffleCards();
// printf(" - ");
//recognizeNumber(2);
//recognizeSuit(2);

PushGlobalStack();

for(int i=0; i<52;i++) {

printf("%d \t", pop());

}

printf("\n\n\n");

return 0;
}

关于在 C 函数内创建全局堆栈变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44094874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com