8 / 11 修改: 解決方案裡面寫的都是廢話...只要用while (getchar () != '\n') 就可以很乾淨的造成程式的暫停了...如果你還是想繼續看錯誤的想法可以繼續閱讀本文
今天心血來潮想寫一個猜數字的遊戲,本來是想要讓使用者按下任意鍵以後繼續遊戲......本來是用getchar()來暫停程式,但如果接下來又需要使用者輸入資料的話,會出現幾個問題。
會出現下列情況:
1. 使用者直接按下ENTER,送出'\n' -----> 程式OK!沒有任何問題
2. 使用者輸入一個字元後按下ENTER -----> 暫停用的getchar()讀到輸入的字母,但讀取用的函數(eg: gets() ...)會讀到遺留下來的垃圾,程式出現問題
3. 使用者輸入一大串字元 (eg: sdawdasdasdsad) ----->getchar()讀到s,讀取用的函數讀到dawdasdasdsad,程式出現問題
第二、三種情況可能有人覺得沒什麼問題,只需要用 fflush(stdin) 就天下太平。但是我用GOOGLE找了一下資料,C的標準只有保證 fflush(stdout) ,並沒有保證 fflush(stdin) ,所以若你的程式使用了 fflush(stdin) 並不保證具有可攜性。
另外一個方法就是使用while (getchar() != '\n') 來清空緩衝區。但若使用者直接按下ENTER,送出'\n'被暫停用的getchar()讀取到,接下來的while (getchar() != '\n')會造成程式的停頓 (請自己體會) ,所以不是個好方法。
我想出來的方法是暫停的函數不應該使用getchar(),而是用
while(fgets(clear, 10, stdin) != NULL && strchr(clear, '\n') == NULL)
continue;
紅字部份請自行依情況更改
2008年7月31日
程式暫時停頓的問題
訂閱:
文章 (Atom)