[問題] 請鄉民救救我的指標....(已解決)
我想要寫一個程式
這個程式的動作是
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
09/10 12:57, 1F
→
09/10 12:58, , 2F
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
09/10 13:12, 3F
推
09/10 13:13, , 4F
09/10 13:13, 4F
→
09/10 13:13, , 5F
09/10 13:13, 5F
我是用VC++ 6.0
debugger是下面視窗的訊息嗎?
→
09/10 13:13, , 6F
09/10 13:13, 6F
→
09/10 13:14, , 7F
09/10 13:14, 7F
※ 編輯: liu2007 來自: 118.232.32.116 (09/10 13:20)
推
09/10 13:47, , 8F
09/10 13:47, 8F
→
09/10 13:47, , 9F
09/10 13:47, 9F
→
09/10 13:47, , 10F
09/10 13:47, 10F