[問題] C語言:指標模擬洗牌程式

看板C_and_CPP (C/C++)作者 (fk)時間16年前 (2009/05/18 14:38), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
感謝辛苦看程式的大大了 我執行了很多次,問題出在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
你的q在 while(q > 0) 這個loop就變成0了 下面還能跑嗎?!
05/18 19:36, 1F

05/20 07:14, , 2F
只會跑else吧
05/20 07:14, 2F
文章代碼(AID): #1A4G9zR_ (C_and_CPP)
文章代碼(AID): #1A4G9zR_ (C_and_CPP)