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

随机发牌。一副纸牌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 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助