问题遇到的现象和发生背景
在写人工洗牌发牌到最后没有bug提示了,但输出的时候说发生访问冲突。事实上,其实还有一个黄色警告说f没有初始化,但是我改了int f[13]={0};也没用,就又改回来了。
问题相关代码,请勿粘贴截图
struct card //定义结构card代表玩家拿到的卡牌
{
char huase[10];
int num;
};
void paimon(int n, card *m)
{
int a[52];//定义1~52随机排列的数组a[52]
int temp;
for (int i = 0; i < 52; i++) //给a[52]赋值
{
a[i] = i + 1;
}
srand((int)time(NULL));//使用srand,rand函数将赋给a[52]的值打乱
for (int j = 0; j < 52; j++)
{
temp = rand() % 52;
int t = a[j];
a[j] = a[temp];
a[temp] = t;
}
for (int k = 0; k < 52; k++)
{
if (a[n] <= 13)
{
*m = card{ "梅花",a[n] };
}
else if (a[n] > 13 && a[n] <= 26)
{
*m = card{ "方块",a[n] - 13 };
}
else if (a[n] > 26 && a[n] <= 39)
{
*m = card{ "红心",a[n] - 26 };
}
else
{
*m = card{ "黑桃",a[n] - 39 };
}
}
}
void fun(card b[13],int g[13])//给玩家拿到手里的牌按照花色、大小进行排序
{
int f[13];
for (int d = 0; d < 13; d++)
{
if (b[d].huase == "梅花")
f[d] = b[d].num;
else if (b[d].huase == "方块")
f[d] = b[d].num + 13;
else if (b[d].huase == "红心")
f[d] = b[d].num + 26;
else if (b[d].huase == "黑桃")
f[d] = b[d].num + 39;
}
for (int h = 0; h < 13; h++)
{
g[h] = h;
}
int tep = 0;
for (int l = 0; l < 13; l++)
{
for (int m = l; m < 13; m++)
{
if (f[l] > f[m])
{
tep = f[l];
f[l] = f[m];
f[m] = tep;
tep = g[l];
g[l] = g[m];
g[m] = tep;
}
}
}
}
char simon(int klee)
{
if (klee == 0)
return 'A';
else if (klee == 1)
return 'K';
else if (klee == 2)
return 'Q';
else if (klee == 3)
return 'J';
else
return klee - '0' + 4;
}
int main()
{
card p1[13] = { 0,0 }, p2[13] = { 0,0 }, p3[13] = { 0,0 }, p4[13] = {0,0};//初始化玩家
cout << "玩家1" << "\t" << "玩家2" << "\t" << "玩家3" << "\t" << "玩家4" << endl;
for (int n = 0; n < 13; n++)//发牌
{
paimon(4 * n, &p1[n]);
paimon(4 * n + 1, &p2[n]);
paimon(4 * n + 2, &p3[n]);
paimon(4 * n + 3, &p4[n]);
}
int g[13], h[13], j[13], k[13];
fun(&p1[13], &g[13]);
fun(&p2[13], &h[13]);
fun(&p3[13], &j[13]);
fun(&p4[13], &k[13]);
for (int l = 0; l < 13; l++)//输出
{
cout << p1[g[l]].huase << " " << simon(p1[g[l]].num) << "\t"
<< p2[h[l]].huase << " " << simon(p2[h[l]].num) << "\t"
<< p3[j[l]].huase << " " << simon(p3[j[l]].num) << "\t"
<< p4[k[l]].huase << " " << simon(p4[k[l]].num) << endl;
}
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
为什么错了,怎么该才能正常运行啊。