m0_74153183 2022-10-16 20:39 采纳率: 95.5%
浏览 66
已结题

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

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

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

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

源.c

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#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<stdio.h>
#include<stdlib.h>
#include<time.h>
//#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;
}

  • 写回答

2条回答 默认 最新

  • 伍六七0804 2022-10-16 21:43
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月24日
  • 已采纳回答 10月16日
  • 创建了问题 10月16日

悬赏问题

  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加