标题:程设小白向各路大神问好,想请教大家这个洗牌程序,为啥outputCard这个函数 ...
只看楼主
cjw小菜鸡
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-12-13
结帖率:100%
已结贴  问题点数:20 回复次数:5 
程设小白向各路大神问好,想请教大家这个洗牌程序,为啥outputCard这个函数只要一出现就returnvalue333244125
/*HW13_2. 洗牌程序. 用一个结构数组保存52张牌, 每张牌包含花色和面值. 首先按照花色
和面值初始化结构数组(正如我们买到的新牌), 然后利用随机数进行洗牌. 输出洗牌结果.
 要求如下:
1) 保存花色的指针数组,
char *suits[] = {"Spades", "Hearts", "Diammonds", "Clubs"};
保存面值的指针数组,
char *faces[] = {"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack", "Queen", "King"};
2)定义初始化纸牌的函数initCards(), 按照花色和面值初始化纸牌结构数组.
3)定义输出纸牌的函数outputCards(), 输出52张纸牌的花色和面值.
4)定义洗牌函数shuffle(), 洗牌算法: 循环考察结构数组中的每个元素,
用随机数函数生成一个52以内的随机数, 将当前考察元素与下标为随机数的元素交换.
HW13_2.JPG*/





#include <stdio.h>
#include<stdlib.h>
#include<time.h>
struct Card{
    char *suits;
    char *faces;
}card;
 
void shuffle(Card cards[][13],int n,int m)
{
    srand(time(0));
    Card card[52];
    Card tempCard;
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            card[i*13+j]=cards[i][j];
        }
    }
    for(i=0;i<52;i++)
    {
        int temp=rand()%(52-i)+i;
        tempCard=card[i];
        card[i]=card[temp];
        card[temp]=tempCard;
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<13;j++)
        {
            cards[i][j]=card[i*13+j];
        }
    }
}
void outputCards(Card yifupai[52])
{
    int i, j, k;
    for(i=k=0;i<9;i++)
    {
        for(j=0;j<6;j++,k++)
        printf("%-10s%-5s|",yifupai[k].suits,yifupai[k].faces);
        printf("\n");
    }
}
int main()
{
    char suits[4][10] = {"Spades", "Hearts", "Diammonds", "Clubs"};
    char faces[][10] = {"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven",
                     "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
    Card cards[4][13];
    int i,j, k=0;
    Card pai[52];
    for(i=0;i<=3;i++)
    {
        for(j=0;j<=12;j++)
        {
            cards[i][j].suits=suits[i];
            cards[i][j].faces=faces[j];
        }
    }
    for(i=0;i<4;i++)
        for(j=0;j<13;j++)
        {
            pai[k].suits=cards[i][j].suits;
            pai[k].faces=cards[i][j].faces;
            k++;
        }
    printf("                  ");
    printf("/*Shuffling Card Program*/\n\n");
    printf("The initial cards are:\n");
    for(i=k=0;i<9;i++)
    {
        for(j=0;j<6;j++,k++)
            printf("%-10s%-5s|",pai[k].suits,pai[k].faces);
        printf("\n");
    }
   
   
//    outputCards(pai);
//    shuffle(cards,4,13);
 
/*    outputCards(pai);
    for(i=k=0;i<4;i++)
        for(j=0;j<13;j++)
        {
            pai[k].suits=cards[i][j].suits;
            pai[k].faces=cards[i][j].faces;
            k++;
        }*/
    printf("The shuffled cards are:\n");
   
}
搜索更多相关主题的帖子: i++ int for 函数 printf 
2019-12-13 16:03
cjw小菜鸡
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-12-13
得分:0 

这是要达到的效果
2019-12-13 16:08
cjw小菜鸡
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-12-13
得分:0 

这是要达到的效果
2019-12-13 16:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
不知道你想问什么?
我运行了一下你的代码,在 printf("%-10s%-5s|",pai[k].suits,pai[k].faces); 处出错,出错时 k = 52;再看其定义 Card pai[52],你数组越界了
2019-12-13 16:36
cjw小菜鸡
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-12-13
得分:0 
明白了  真的感谢
2019-12-13 18:25
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:10 
typedef struct Card
 {
     char *suits;
     char *faces;
 }Card;

运行了一下你的程序你结构体应该使用typedef定义,否则
void shuffle(Card cards[][13],int n,int m)
会报错的。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-13 18:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498376-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.439816 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved