作者herchen (fk)
看板C_and_CPP
標題[問題] C語言:指標模擬洗牌程式
時間Mon May 18 14:38:52 2009
感謝辛苦看程式的大大了
我執行了很多次,問題出在shuffle副程式
可能出問題的地方我先標上記號
如果型式參數q < 10/2的話,執行正常
若q不小於10/2,程式就當掉
請高人指導
#include <stdio.h>
#include <stdlib.h>
typedef struct card
{
int n;
struct card *next;
}Card;
void printList(Card *);
void shuffle(Card *, int);
int main(int argc, char *argv[])
{
int i;
Card *head, *p;
p = malloc(sizeof(Card));
head = p; //產生十個Card
p->n = 10;
p->next = NULL;
for(i=9;i>0;i--)
{
p = malloc(sizeof(Card));
p->n = i;
p->next = head;
head = p;
}
printList(head);
shuffle(head, 9);
printf("After shuffle....\n");
printList(head);
system("PAUSE");
return 0;
}
void printList(Card *head)
{
Card *ptr = head;
while(ptr != NULL)
{
printf("%d --> ", ptr->n);
ptr = ptr->next;
}
printf("NULL\n");
}
void shuffle(Card *head, int q)
{
Card *ptr1, *ptr2, *temp1, *temp2, *ptrq;
ptr1 = head;
ptr2 = head;
while(q > 0)
{
ptr2 = ptr2->next;
q--;
}
ptrq = ptr2;
if(q > 10/2) // 問題應該出現從這裡開始的16行
{
while(ptr2 != NULL)
{
temp1 = ptr1->next;
temp2 = ptr2->next;
ptr2->next = ptr1->next;
ptr1->next = ptr2;
ptr1 = temp1;
ptr2 = temp2;
}
while((ptr1->next) != ptrq)
{
ptr1 = ptr1->next;
}
ptr1->next = NULL;
}
else
{
while((ptr1->next) != ptrq)
{
temp1 = ptr1->next;
temp2 = ptr2->next;
ptr2->next = ptr1->next;
ptr1->next = ptr2;
ptr1 = temp1;
ptr2 = temp2;
}
ptr1->next = ptr2;
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.19.174.150
1F:推 Yshuan:你的q在 while(q > 0) 這個loop就變成0了 下面還能跑嗎?! 05/18 19:36
2F:推 ilovebbs:只會跑else吧 05/20 07:14