作者liu2007 (薯)
看板C_and_CPP
標題[問題] 請鄉民救救我的指標....
時間Thu Sep 10 12:34:37 2009
我想要寫一個程式
這個程式的動作是
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)
推 holymars:while (First->next == NULL) 09/10 12:57
→ holymars:這個while loop根本不會進去吧 09/10 12:58
\(" ̄口 ̄)/ 改成!=就可以了~ 我又耍笨了Orz.....感謝聖大!!
下面的圖就不用看了XDDDDDDD (難得畫圖)
******************************************************************************
經過ReadCheater()函式後
First Point
↓ ↓
◎→█→█→█→█→█→█→█→█→█→█→█→NULL
******************************************************************************
SortCheater中的while開始前:
First
↓
◎→█→█→█→█→█→█→█→█→█→█→█→NULL
↑
Point
SortedFirst
↓
◎→NULL
↑
temp
******************************************************************************
※ 編輯: liu2007 來自: 118.232.32.116 (09/10 13:15)
推 holymars:對啊 First->next不是NULL 那while loop怎麼會跑呢 09/10 13:12
推 Peruheru:While的()內條件「成立」才會「進入」,你搞顛倒了 09/10 13:13
→ holymars:你用什麼IDE啊 學一下基本的debugger怎麼用吧XD 09/10 13:13
我是用VC++ 6.0
debugger是下面視窗的訊息嗎?
→ holymars:為這種bug花三天真是不值得XDDD 09/10 13:13
→ Peruheru:要進入的條件要反過來寫,=Null時離開就寫成!=Null 09/10 13:14
※ 編輯: liu2007 來自: 118.232.32.116 (09/10 13:20)
推 VictorTom:debugger, 就是環境給你的debug用的工具汎稱吧.... 09/10 13:47
→ VictorTom:比如用step by step一行一行trace, 搭配watch看變數, 09/10 13:47
→ VictorTom:加入code break或data break point等等.... 09/10 13:47