c總結 使用scanf輸入字串問題
阿新 • • 發佈:2019-01-24
學習c時經常遇到字串的輸入問題,使用scanf輸入時總是會或多或少的遇到錯誤,總結一下我遇到過的情況
同時輸入字元和字串
剛開始編寫時可能大多數會這樣寫:
(ch1為字元型別的陣列,陣列名即陣列的首地址,所以不要&)
當輸入 字元 回車時會出現下面情況:
還沒有輸入字串輸入就結束了。當我們需要呼叫scanf輸入的時候,輸入的字元送到鍵盤緩衝區,然後scanf從中讀取所規定的字元,例如 輸入格式為%d,輸入為777a2,實際上輸入進去的時777,輸入77 777,實際上輸入進去的是77,因為空格和回車也會被scanf認為是字元。
當我們輸入c回車時,scanf從緩衝區把c提走賦予ch,但回車還在緩衝區並未提走,輸入字串時因為回車也是字元所以被賦予給ch1。
使用scanf輸入可以這樣做:
1.
結果是:
getchar() 是從控制檯接收字元,注意只會接收一個字元,此時回車被getchar提走了
2.
結果是:
常用的是這兩種方式,當然也可以直接使用gets()來輸入字串,它會把回車一起提走但不會把回車輸入數組裡,也可以使用fflush(stdin),是將緩衝區清空。