[問題] 請鄉民救救我的指標....(已解決)

看板C_and_CPP作者 (薯)時間14年前 (2009/09/10 12:34), 編輯推噓4(406)
留言10則, 3人參與, 最新討論串1/1
我想要寫一個程式 這個程式的動作是 void main() { FirstNode(); ReadCheater(); SortCheater(); //WriteCheater(); } 這是節點結構 struct Node { char Str[50]; unsigned int Length; struct Node *next; } *First, *Point, *SortedFirst; 函式內容: 建立一個新的節點 struct Node* NewNode(void) { struct Node *New; New = ( struct Node* )malloc(sizeof( struct Node)); New->next = NULL; return New; } 先建立兩個空節點 一個是為排序的起始節點 一個是以排序的起始節點 void FirstNode(void) { First = NewNode(); SortedFirst = NewNode(); Point = First; } 讀txt檔裡面的資料 每讀一筆資料(字串) 就make一個新的節點出來儲存 void ReadCheater(void) { FILE *fSource = fopen(" Path\\Cheater.txt","r"); struct Node *temp; char Str[100]; do{ temp = NewNode(); fscanf(fSource, "%s\n", &Str); if ((strcmp(Str, " ")==0)||(strcmp(Str, " ")==0)|| (strcmp(Str, "  "))==0) { fscanf(fSource, "%s", &Str); } strcpy( temp->Str, Str); temp->Length = strlen(Str); Point->next = temp; Point = Point->next; } while (!feof(fSource)); } 其中do while 裡面的if 功能是在於: 如果讀到程式認為是字串,但其實不是(換行、非中文或英文的"亂碼") 就再讀下一個字串。 這段我測試過了沒什麼問題 問題在於下一個函式 之後作長度的排序(不作內容的排序) void SortCheater(void) { struct Node *temp; unsigned int Length = 0; FILE *fOutput = fopen("Path\\Sorted.txt","w"); temp = SortedFirst; Point = First; while (First->next == NULL){ Length++; while (Point->next != NULL){ if ( Point->next->Length == Length){ temp->next = Point->next; Point->next = Point->next->next; temp = temp->next; } else Point = Point->next; } Point = First; } temp = SortedFirst; do { fprintf(fOutput, "%s\n", temp->Str); temp = temp->next; } while (temp != NULL); fclose(fOutput); } 這裡 我看了印出來的結果 是空字串(不像中文字的中文字,而且只有一行) 代表temp似乎沒有指向SortedFirst這個空節點..... 為什麼會這樣呢? 這裡是我的原始資料: http://www.badongo.com/file/17096488 這是原始資料的來源: http://tw.csonline.gamania.com/event/20090901/090908_2.htm 因為我還不會讀網路 所以先將就複製貼上在筆記本裡 請鄉民救救我的指標..... 除蟲除了三天了..... 感激 <(_._)> -- 聖露西亞捐款10萬美金 該國人口數僅17萬 silverache:換算過來 平均每個國民捐給我們20幾萬台幣~~啾感心LIONDODO:哇,一個人捐20幾萬… m7cord:好感動,一個人二十萬耶。Q_Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.232.32.116 ※ 編輯: liu2007 來自: 118.232.32.116 (09/10 12:37)

09/10 12:57, , 1F
while (First->next == NULL)
09/10 12:57, 1F

09/10 12:58, , 2F
這個while loop根本不會進去吧
09/10 12:58, 2F
 \(" ̄口 ̄)/ 改成!=就可以了~ 我又耍笨了Orz.....感謝聖大!! 下面的圖就不用看了XDDDDDDD (難得畫圖) ****************************************************************************** 經過ReadCheater()函式後 First Point ↓ ↓ ◎→█→█→█→█→█→█→█→█→█→█→█→NULL ****************************************************************************** SortCheater中的while開始前: First ↓ ◎→█→█→█→█→█→█→█→█→█→█→█→NULL ↑ Point SortedFirst ↓ ◎→NULL ↑ temp ****************************************************************************** ※ 編輯: liu2007 來自: 118.232.32.116 (09/10 13:15)

09/10 13:12, , 3F
對啊 First->next不是NULL 那while loop怎麼會跑呢
09/10 13:12, 3F

09/10 13:13, , 4F
While的()內條件「成立」才會「進入」,你搞顛倒了
09/10 13:13, 4F

09/10 13:13, , 5F
你用什麼IDE啊 學一下基本的debugger怎麼用吧XD
09/10 13:13, 5F
我是用VC++ 6.0 debugger是下面視窗的訊息嗎?

09/10 13:13, , 6F
為這種bug花三天真是不值得XDDD
09/10 13:13, 6F

09/10 13:14, , 7F
要進入的條件要反過來寫,=Null時離開就寫成!=Null
09/10 13:14, 7F
※ 編輯: liu2007 來自: 118.232.32.116 (09/10 13:20)

09/10 13:47, , 8F
debugger, 就是環境給你的debug用的工具汎稱吧....
09/10 13:47, 8F

09/10 13:47, , 9F
比如用step by step一行一行trace, 搭配watch看變數,
09/10 13:47, 9F

09/10 13:47, , 10F
加入code break或data break point等等....
09/10 13:47, 10F
文章代碼(AID): #1Ag87YDY (C_and_CPP)