纯业余新人,第一次提问,代码写得很差qwq
自己查了好几遍不知道哪里错了
希望能得到大佬们解答,也希望大佬们能多多指点
#include<iostream>
using namespace std;
struct node
{
char rank,suit;
struct node *left,*down,*up;
}card[53+3];
int N=52;
void move(int i)
{
if(card[i].left ==NULL||card[i].up !=NULL) return;
if((*(*card[i].left).left).left==NULL)
{
if(card[i].rank ==(*card[i].left).rank ||card[i].suit ==(*card[i].left).suit )
{
if(card[i].down ==NULL) N--;
card[i].down =card[i].left;
(*card[i].left ).up=&card[i];
card[i].left =(*card[i].left).left;
return move(i);
}
}
else
{
if(card[i].rank ==(*(*(*card[i].left).left).left).rank||card[i].suit ==(*(*(*card[i].left).left).left).suit )
{
if(card[i].down ==NULL) N--;
card[i].down =(*(*card[i].left).left).left;
(*(*(*card[i].left).left).left).up=&card[i];
card[i].left =(*(*(*card[i].left).left).left).left;
return move(i);
}
else
{
if(card[i].rank ==(*card[i].left).rank ||card[i].suit ==(*card[i].left).suit )
{
if(card[i].down ==NULL) N--;
card[i].down =card[i].left;
(*card[i].left ).up=&card[i];
card[i].left =(*card[i].left).left;
return move(i);
}
}
}
return;
}
int main()
{
int t=0,i,j,s=0;
char a;
for(i=1+3;i<=52+3;i++) cin>>card[i].rank>>card[i].suit;
cin>>a;
//输入
for(i=0;i<4;i++)
{
card[i].left =NULL;
card[i].rank =0;
card[i].suit =0;
}
card[1+3].left=NULL;
for(i=2+3;i<=52+3;i++) card[i].left =&card[i-1];
for(i=1;i<=52+3;i++)
{
card[i].down =NULL;
card[i].up =NULL;
}
//初始化
while(t!=52)
{
t=0;
for(i=1+3;i<=52+3;i++)
{
if(card[i].up !=NULL||card[i].left ==NULL)
{
t++;
continue;
}
if((*(*card[i].left).left).left==NULL)
{
if(card[i].rank !=(*card[i].left).rank &&card[i].suit !=(*card[i].left).suit )
{
t++;
continue;
}
}
else
{
if(card[i].rank !=(*(*(*card[i].left).left).left).rank&&card[i].suit !=(*(*(*card[i].left).left).left).suit )
{
if(card[i].rank !=(*card[i].left).rank &&card[i].suit !=(*card[i].left).suit )
{
t++;
continue;
}
}
}
move(i);
}
}
//移动
cout<<N<<" piles remaining:";
for(i=1+3;i<=52+3;i++)
{
if(card[i].up ==NULL)
{
j=i;
while(card[j].down!=NULL)
{
j++;
s++;
}
cout<<" "<<s+1;
}
}
return 0;
}
1. 说明出错在哪里? 什么地方不符合你的期待?
2. 简化程序, 从最简单的核心代码写起, 保证执行成功后再加新的语句, 持续测试
谢谢楼上的回复
语法编译没有问题。错误是编译运行时显示XXX.exe已停止工作。出错好像是在中间的while那一块,但是我自己一直查不出来。我自己检查的时候没找到哪里数组越界、指针越界、死循环,可能是我自己没看出来