登出的方式則是利用狀態變數,若 STATE 被設定成 EXIT ,就會跳出 while (1) 迴圈,因而結束 frienddata() 回到 login() ,重新進行 login() 中的 while (1) 迴圈。
完整的標頭檔及實作檔,請參考
繼續測試,假設通訊錄中已經有這些資料
輸入 3 ,查詢好友
嗯,有 mary 的資料
再來排序一下
印出列表
選擇 6 ,存檔後登出
重新登入一次
重新印出列表
咦?剛剛建立的資料都不見了,這是為什麼呢?因為那些資料存取的入口為 startPtr ,而 startPtr 屬於 frienddata() 的區域變數,當我們回到 login() 重新登入後,便無法再利用之前建立的區域變數囉!
我們不是用存檔後登出嗎?但是還沒實際建立存檔機制唄!下一個部份我們將介紹標準函數庫中有關存檔的功能。
問題與討論
- 有沒有方法在離開函數後,下一次進入函數仍能利用原先區域變數的值?
- 登出機制中,需不需要加入清空鏈結串列的機制,也就是呼叫 free() 釋放每個節點的空間?
沒有留言:
張貼留言