ばばぬきプログラムについて
下記のようなプログラムで4人のコンピュータにババヌキをさせるプログラムを組んでる最中なんです。
decklistまでは表示できてもshufflelistではコンパイルは通っても実行するとデバックが起きてしまって困っています。while文をなくすとちゃんと返り値を持って表示はできるんですがwhile分で繰り返したとたんデバックが起きるんですがその理由がわかりません。どうして無理でしょうか?ご教授願います。
decklistは整列されリストに保存した山札の関数。
shufflelistはランダムで保存していく関数。
personの関数はdecklistのほうで試したところコンパイルは通るんですがこちらもデバックが起きてしまいます。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define N 53
//デッキのカードの構造体
struct card{
int t;
struct card *next;
}*deck;
//カードを配った後のそれぞれのプレイヤーの情報(仮
struct player{
int card;
struct player *nextcard;
struct player *nextturn;
};
//関数定義
struct card *talloc(void);
struct player *lalloc(void);
struct card *decklist(void);
struct card *shufflelist(void);
struct player *person(struct player *P);
void displist(void);
int main(void){
struct player *A,*B,*C,*D;
struct player *p;
p=person(A);
while(p!=NULL){
printf("%d ",p->card);
p=p->nextcard;
}
return 0;
}
//card構造体のセルの確保
struct card *talloc(void){
return (struct card *)malloc(sizeof(struct card));
}
//player構造体のセルの確保
struct player *lalloc(void){
return (struct player *)malloc(sizeof(struct player));
}
//カードを切る前の整列された山札の関数
struct card *decklist(void){
int i,add=1,count=0;
struct card *p;
deck=NULL;
for(i=0;i<53;i++){
if(count==4){
add+=1;
count=0;
}
p=talloc();
p->t=add;
p->next=p;
count++;
p->next=deck;
deck=p;
}
return deck;
}
//山札をシャッフルした後の山札の関数
struct card *shufflelist(void){
int i,a,count=0,r;
struct card *d,*p,*q,*shuffle;
p=decklist();
shuffle=NULL;
while(p!=NULL){
srand(time(NULL));
r=(int)rand()%(N-count);
for(i=0;i<r;i++){
p=p->next;
}
q=talloc();
q->t=p->t;
d=p->next;
p->next=d->next;
q->next=shuffle;
shuffle=q;
count++;
p->next=p;
}
return shuffle;
}
//プレイヤーへカードを配るための関数
struct player *person(struct player *PERSON){
struct player *a;
struct card *library;
int i;
PERSON=NULL;
library=decklist();
a=lalloc();
while(a!=NULL){
a->card=library->t;
for(i=0;i<4;i++){
library=library->next;
}
a->nextcard=a;
a=PERSON;
}
a->nextcard=NULL;
while(a!=NULL){
printf("%d ",a->card);
}
return PERSON;
}
お礼
まさに知りたいことが分かった感じです。 丁寧な回答ありがとうございます。 助かりました!!!