[問題] C語言:指標模擬洗牌程式
感謝辛苦看程式的大大了
我執行了很多次,問題出在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
推
05/18 19:36, , 1F
05/18 19:36, 1F
推
05/20 07:14, , 2F
05/20 07:14, 2F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章