运行出现
*** stack smashing detected ***: <unknown> terminated
作为大一学生不理解
我的思路是使用两个函数进行操作拆解,一个是交换一个是输出。首先是创建一个数组存数字代表卡牌,一个数组存交换规律,一个空数组。在交换里则是将前一个数组换到后一个数组,可以通过改变变量列表顺序来实现承接数组的选择,让n不限制程序的正确性,让程序具有移植性,后选择好最后的承接数组将数组内数组转换成卡牌进行输出
#include <iostream>
using namespace std;
void change (int a[54],int b[54],int c[54])
{
int m;
for(int i = 0;i<54;i++)
{
m = a[i];
c[m] = b[i];
}
}//将原数组顺序改变并存入下一个数组
void shuchu (int a[54])
{
int n,flag = 1;
for(int i = 0;i<54;i++)
{
if(i ==53) flag = 0;
n = a[i]%13;
if(n == 0) n = 13;
if(a[i]/13 == 0) cout<<"S"<<n;
if(a[i]/13 == 1) cout<<"H"<<n;
if(a[i]/13 == 2) cout<<"C"<<n;
if(a[i]/13 == 3) cout<<"D"<<n;
if(a[i]/13 == 4) cout<<"J"<<n;
if(flag != 0) cout<<endl;
}
}//将数字大小转换为牌的符号
int main()
{
int a;
cin>>a;
int A[54],B[54],C[54];
for(int i = 0;i<54;i++)
{
B[i] = i+1;
}//数组B用于存数字表示每一张卡牌
for(int i = 0;i<54;i++)
{
cin>>A[i];
}//数组A表示洗牌的规律
for(int i = 1;i<=a;i++)
{
if(i%2 != 0) change(A,B,C);
if(i%2 ==0) change(A,C,B);
}//根据洗牌次数决定交换次数以及最后作为结果的数组
if(a%2 !=0) shuchu(C);
if(a%2 ==0) shuchu(B);//将确定的结果数组输出
return 0;
}
我的思路是使用两个函数进行操作拆解,一个是交换一个是输出。首先是创建一个数组存数字代表卡牌,一个数组存交换规律,一个空数组。在交换里则是将前一个数组换到后一个数组,可以通过改变变量列表顺序来实现承接数组的选择,让n不限制程序的正确性,让程序具有移植性,后选择好最后的承接数组将数组内数组转换成卡牌进行输出。