[問題] do while迴圈無法跳出

作者: nobodyuse (祝天下有情人終成眷屬)   2015-05-10 18:19:09
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)

問題(Question):
while內條件式無法成立
餵入的資料(Input):
while(sort_list->data)
預期的正確結果(Expected Output):
當不輸入資料,直接按下ENTER鍵時應該跳出do while迴圈
錯誤結果(Wrong Output):
do while行程無線迴圈
程式碼(Code):(請善用置底文網頁, 記得排版)
小弟欲輸入各個數字,並按下ENTER鍵後,離開程
typedef struct _list{
int data;
struct _list *next;
}list;
int main(int argc,char *argv[])
{
int input=0;
char *buffer=(char *)malloc(5);
list *sort_list;
do{
list *sort_list=(list *)malloc(sizeof(list));
sort_list->next=NULL;
printf("Please input your member to sort: ");
fgets(buffer,5,stdin);
sort_list->data=(atoi)(buffer);
printf("%d\n",sort_list->data);
} while (sort_list->data);
free(buffer);
free(sort_list);
}
補充說明(Supplement):
作者: vvrr (vvrr)   2015-05-10 18:44:00
用gcc 4.8.2在Ubuntu下執行是正常的@@順帶一提,這樣子如果輸入「0」的話也會跳出迴圈哦..
作者: longlongint (華哥爾)   2015-05-11 04:32:00
對不起 我看不懂原po的程式
作者: scwg ( )   2015-05-11 05:04:00
在 do{ 裡面宣告的 list *sort_list 遮住了外面的定義, 選個不同的名字, 然後讀書看 linked list 怎麼插入元素
作者: nobodyuse (祝天下有情人終成眷屬)   2015-05-11 08:27:00
這是一個未完成的程式,主要是要以指標方式儲存資料do while 迴圈會多增加一個list *sort_list是因為gcc編譯時會出現sort_list undeclared (first use in thisfunction)的錯誤訊息,這是讓小弟感到奇怪的地方。但是列印sort_list->data,不論是按下ENTER與0其顯示值都是0,只是納悶為何跳不出迴圈?另外,若不以指標方式而修改宣告為list sort_list,並將所有的sort_list->data改為sort_list.data則可正常執行,可以跳脫do while迴圈,小弟也曾懷疑是否以指標方在迴圈中print出sort_list->data值確定為0,因此不知跳不出迴圈,不知小弟的觀念上哪裡出了問題?感謝各位
作者: qsort (Cos)   2015-05-11 09:56:00
你的compile是哪一個?do while的sort_list scope,只限在do while內而while (sort_list->data) 的sort_list, 其實是用buffer下面的那一個,也就是一個uninitialized sort_listhttp://ideone.com/hYmzpU 請看記憶體,不是同一塊
作者: vvrr (vvrr)   2015-05-11 11:05:00
0rz我第一次compile的時候也有出現那個錯誤 修掉後忘記了..沒注意到就推文說沒有問題@@...抱歉
作者: nobodyuse (祝天下有情人終成眷屬)   2015-05-11 11:50:00
感謝vvrr協助解決...將do while內部list *sort_list=(list *)malloc(xxxx)拿掉list *即可正常work...感謝各位!!

Links booklink

Contact Us: admin [ a t ] ucptt.com