随机发牌。一副纸牌52张,4种花色,每种花色13张。用程序模拟随机发牌过程,将52张牌按轮转的方式发放给4人,并输出发牌结果。

问题遇到的现象和发生背景

(结构体)随机发牌。一副纸牌52张,4种花色,每种花色13张。用程序模拟随机发牌过程,将52张牌按轮转的方式发放给4人,并输出发牌结果。(当我使用单文件编程时,可以运行。但是当我将调用的函数放到另一个文件里,结果就不行了)

用代码块功能插入代码,请勿粘贴截图

源.c

#include
#include
#include
#include"1.h"
struct card
{
    int suit;
    int face;
}; 
int main()
{
    int i;
    struct card deck[52];
    const char* suit[] = { "s","ss","sss","ssss" };
    const char* face[] = { "A","K","Q","J","10","9","8","7","6","5","4","3","2","1" };
    deal(deck);
    for (i = 0; i < 52; i++)
    {
        if (i % 13 == 0) {
            printf("Player %d:\n", i / 13 + 1);
        }
        printf("%s of %s\n", face[deck[i].face], suit[deck[i].suit]);
    }
    return 0;
}

1.h

void deal(struct card* wdeck)
{
    int m, i, t;
    static int temp[52] = { 0 };
    srand(time(NULL));
    for (i = 0; i < 52; i++)
    {
        while (1) {
            m = rand() % 52;
            if (temp[m] == 0) {
                break;
            }
        }
        temp[m] = 1;
        t = (i % 4) * 13 + (i % 4);
        wdeck[t].suit = m / 13;
        wdeck[t].face = m % 13;
    }
}

运行结果及报错内容

用VS时

img


用Dev时

img

我的解答思路和尝试过的方法

单文件时可行,为什么两个文件不行
单文件时

#include
#include
#include
//#include"1.c"
struct card
{
    int suit;
    int face;
};
void deal(struct card* wdeck)
{
    int m, i, t;
    static int temp[52] = { 0 };
    srand(time(NULL));
    for (i = 0; i < 52; i++)
    {
        while (1) {
            m = rand() % 52;
            if (temp[m] == 0) {
                break;
            }
        }
        temp[m] = 1;
        t = (i % 4) * 13 + (i % 4);
        wdeck[t].suit = m / 13;
        wdeck[t].face = m % 13;
    }
}
int main()
{
    int i;
    struct card deck[52];
    const char* suit[] = { "s","ss","sss","ssss" };
    const char* face[] = { "A","K","Q","J","10","9","8","7","6","5","4","3","2","1" };
    deal(deck);
    for (i = 0; i < 52; i++)
    {
        if (i % 13 == 0) {
            printf("Player %d:\n", i / 13 + 1);
        }
        printf("%s of %s\n", face[deck[i].face], suit[deck[i].suit]);
    }
    return 0;
}

.h文件你可以理解成把.h文件中的内容复制到你的.c中。两个文件的时候 你.h里面的函数过来的时候在结构体定义之前了 。你要把.h放在定义结构体的后面 或者把你的结构体定义到.h中去

把 include “1.h” 放到 结构体定义之后、主程序之前。