今天老師檢查的時候說如果一個鏈表為空(簡單的說就是while(scanf())一開始沒輸入數字就按回車的話會進入死循環)的情況,
我當時有點懵,因為文檔里強調為空的情況。還好老師叫我自己現場實現一下,
當時想了兩個方案:
*一是用getchar()接受第一個回車(我設定的輸入回車結束),如果用戶第一個鍵盤輸入就是回車,它能工作的很好。

但是當第一個鍵盤輸入不是一個回車的時候,就遇到一個問題:getchar()會吃掉第一個數字
的一部分,之所以說一部分是因為經過我測試發現:

Getchar()能返回的值最大為57,這顯然是不合理的。
於是我想到了第二個方法:
*先用getchar讀取,如果getchar讀取的不是回車,就將它重新放回緩沖區,再又scanf()函數來
讀取。但是這個方案有點麻煩,還要區查資料,搞明白怎么將讀取的數據重新放回緩沖區。好的
是在我采取這個方案之前我想到了更好的辦法:
第三個辦法:
*將結尾判斷改一下直接上圖,待會解釋原理

我對這個函數做了兩處改動,第一個和第三個箭頭。
第一個改動是把Enter鍵改成了q鍵,因為回車會刷新緩沖區,而scanf()函數一直在等待一個數字,
所以在一開始狂按回車是沒用的,解決方案就是把回車換成一個字符(q可以代表quit,所以用q,
其他字符也可以)。程序遇到用戶輸入的q時,圖片中函數里的u等於0,所以退出whlie語句。
第二個改動是在兩個while語句之間加了一個getchar(),他的作用是:當用戶輸入q時,第一個while
里面的scanf函數是沒有讀取到這個q的,,如果沒有這個getchar,那么用戶輸入的q將由第二個
scanf函數來讀取。這樣第二個while 語句就不會運行。
這樣,程序就能滿足輸入為空表的情況了。
