C BlackJack编译但存在分段错误 #包括 #包括 #包括 #包括 typedef enum{梅花、钻石、红桃、黑桃}套装; typedef枚举{Ace=1,2=2,3=3,4=4,5=5,6=6,7=7,8=8,9=9,10=10,Jack=10,Queen=10,King=10}; 类型定义结构卡 { 西服; 面对面; }卡片; 类型定义结构堆栈 { 卡片组[52]; 整数大小; }stack_h; 空甲板初始(烟囱高度*烟囱); int main() { 堆栈h堆栈; 整数输入; printf(“欢迎来到CodeHero的21点”\n); fflush(stdout); printf(“输入1继续或按2退出”); fflush(stdout); scanf(“%d”,条目(&T); fflush(stdin); 开关(入口) { 案例1: 甲板初始(和堆栈); 甲板展示(和堆叠); 打破 案例2: printf(“退出”\n); fflush(stdout); 出口(1); 打破 } } 空甲板初始(堆叠高度*堆叠) { 对于(int i=Ace;i size.),面=i; 堆栈->甲板[堆栈->大小].suit=j; 堆栈->大小++; } } } 空甲板展示(堆叠高度*堆叠) { int x,i,j; printf(“%d张卡片在卡片组中。”,堆栈->大小); 对于(i=0;isize]的地方.face=i;然后是分段错误。我真的不知道我需要做什么,因为我相信它会起作用。我曾尝试将它从指针更改为常规样式堆栈。deck sorta技术,但也遇到了同样的问题。我认为它可能会有问题,因为“enum”不是int,它不想增加不管怎么说,可能是“枚举”或类似的东西。

C BlackJack编译但存在分段错误 #包括 #包括 #包括 #包括 typedef enum{梅花、钻石、红桃、黑桃}套装; typedef枚举{Ace=1,2=2,3=3,4=4,5=5,6=6,7=7,8=8,9=9,10=10,Jack=10,Queen=10,King=10}; 类型定义结构卡 { 西服; 面对面; }卡片; 类型定义结构堆栈 { 卡片组[52]; 整数大小; }stack_h; 空甲板初始(烟囱高度*烟囱); int main() { 堆栈h堆栈; 整数输入; printf(“欢迎来到CodeHero的21点”\n); fflush(stdout); printf(“输入1继续或按2退出”); fflush(stdout); scanf(“%d”,条目(&T); fflush(stdin); 开关(入口) { 案例1: 甲板初始(和堆栈); 甲板展示(和堆叠); 打破 案例2: printf(“退出”\n); fflush(stdout); 出口(1); 打破 } } 空甲板初始(堆叠高度*堆叠) { 对于(int i=Ace;i size.),面=i; 堆栈->甲板[堆栈->大小].suit=j; 堆栈->大小++; } } } 空甲板展示(堆叠高度*堆叠) { int x,i,j; printf(“%d张卡片在卡片组中。”,堆栈->大小); 对于(i=0;isize]的地方.face=i;然后是分段错误。我真的不知道我需要做什么,因为我相信它会起作用。我曾尝试将它从指针更改为常规样式堆栈。deck sorta技术,但也遇到了同样的问题。我认为它可能会有问题,因为“enum”不是int,它不想增加不管怎么说,可能是“枚举”或类似的东西。,c,enums,int,C,Enums,Int,我试图做的是用卡片填充卡片组,然后显示所有卡片,以确保填充的卡片组工作正常,但是当我编译它时,它说我没有错误,然后我就开始运行程序,它一直运行到它显示stack->deck[stack->size]的地方.face=i;然后是分段错误。我真的不知道我需要做什么,因为我相信它会起作用。我曾尝试将它从指针更改为常规样式堆栈。deck sorta技术,但也遇到了同样的问题。我认为它可能会有问题,因为“enum”不是int,它不想增加不管怎么说,可能是“枚举”或类似的东西。堆栈结构没有分配到任何地方,您

我试图做的是用卡片填充卡片组,然后显示所有卡片,以确保填充的卡片组工作正常,但是当我编译它时,它说我没有错误,然后我就开始运行程序,它一直运行到它显示stack->deck[stack->size]的地方.face=i;然后是分段错误。我真的不知道我需要做什么,因为我相信它会起作用。我曾尝试将它从指针更改为常规样式堆栈。deck sorta技术,但也遇到了同样的问题。我认为它可能会有问题,因为“enum”不是int,它不想增加不管怎么说,可能是“枚举”或类似的东西。

堆栈结构没有分配到任何地方,您正试图访问
堆栈中未分配的
指针字段(以及更高版本)。您可能希望使用
malloc
动态分配它,或者静态地在
main
中声明
stack\t
变量,并使用指向它的指针进行操作。
Upd(编辑后):
堆栈->大小
也没有在任何地方初始化。在
deck\u init
中使用之前,应该将其初始化为零
Upd2:在
deck\u show
中,您试图打印未初始化的变量
i,j
,并传递这两个变量,而
printf
中只有一个格式化修饰符如果您想在
main()
中分配堆栈并将其指针传递给您调用的函数,请使用:

 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 #include <getopt.h>


typedef enum {Clubs, Diamonds, Hearts, Spades} suit_t;
typedef enum {Ace = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10, Jack = 10, Queen = 10, King = 10} face_t;

typedef struct card_t
{
        suit_t suit;
        face_t face;
} card;

typedef struct stack_t
{
    card_t deck[52];
    int size;
} stack_h;

void deck_init(stack_h *stack);
int main()
{
        stack_h stack;
        int entry;
        printf("Welcome to BlackJack by CodeHero\n");
        fflush ( stdout );
        printf("Enter 1 to Continue or press 2 to Exit\n");
        fflush ( stdout );
        scanf("%d", &entry);
        fflush ( stdin );

        switch ( entry )
        {
                case 1:

                        deck_init ( &stack );
                        deck_show ( &stack );
                        break;
                case 2:
                        printf("Exitting\n");
                        fflush ( stdout );
                        exit( 1 );
                        break;
        }
}

 void deck_init(stack_h *stack)
 {
        for (int i = Ace; i <= King; ++i)
        {
                for (int j = Clubs; j <= Spades; j++)
                {
                         stack->deck[stack->size].face = i;
                         stack->deck[stack->size].suit = j;
                         stack->size++;
                }
        }
}

void deck_show (stack_h *stack)
{
    int x, i ,j;
    printf("%d Cards in the deck. ", stack -> size);
    for (i = 0; i< 13; i++)
    {
      for(j=0; j < 4; j++)
      {
                printf("%d of %d\n", i, j);
       }
     }
}
然后使用
&stack
将其指针传递给采用堆栈指针的函数:

stack_t stack; /* or stack_h if that's your new type name */
您的
stack\u t*stack;
声明只创建一个指针,不给该指针赋值


如果这是一个大型结构,或者可能会有很多这样的结构,那么您可能希望在运行时使用
malloc()
来分配它们,但我会等待,稍后再添加这种复杂性——如果需要的话。

Ctrl+F“malloc”代码中不返回任何内容:你在哪里分配堆栈?@geogesl在我的堆栈结构中我有卡片组[52],这就是我分配它的地方。我的问题是这一行:“stack\u h*stack。它提示您希望使用堆分配的内存来保存名为“stack”的实例。但是,在C中动态分配必须使用malloc函数手动完成。您的“stack”变量只是一个悬空指针。顺便问一下,
stack\u h
在哪里定义?我只看到了
stack\u t
。stack\u h*stack;这在main和shoul中除非我错了,否则我会宣布的。
deck_init(&stack): /* for example */