2017-05-21 29 views
-1

で関数内のグローバルスタック変数を作成し、私は何をしようとしているCプログラミング私はターミナルブラックジャックのゲームをコーディングしようとしているC

で新たなんだ、内部グローバルスタックを作成することですシャッフルされたすべてのカード(52枚)を1枚ずつ押し込むことができる機能です。

#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; 
} 

は私だけのコードでノートを書いた:そして、全てのプレイヤーは、ここで

は私のコードである。)(カードまたは2 ...と、スタック内のカードの減少の数を開くことができますみんなに問題を示すために、どうすれば解決できるの?メインのスタックをチェックすると空です。

ありがとうございました!恵まれた一日を!

+0

なぜ 'main'の中に配列' int cards [52] 'を宣言して関数へのポインタを渡すのですか? –

+1

プログラムが起動すると、グローバルスタック[]は空です。あなたの最初のループでは、カードをスタック[]にプッシュし、直ちにそれを再びポップします。スタックは再び空になります。 52回のループ反復後、stack []はまだ空です。 – user5329483

+0

@ user5329483このコメントを回答として投稿する必要があります。 – melpomene

答えて

-1

実際にコードで言及した問題は正しくありません。宣言したスタックは、グローバルに定義したように、すでにグローバルスタックになっています。

すぐにテストすることができます。関数内で値をプッシュすることができるpushGlobalStack()という関数があります。そして、スタックがグローバルかどうかをチェックするために、pushGlobalStack()の代わりにmainの中に値をポップしてください。値が正確に同じであることを確認できます。

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; 
} 
+0

ありがとう、私は問題を発見した、そしてチップのおかげで、私はそれをできるだけ早く使用する!私は解決策として答えを受け入れました – Walidou

関連する問題