程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> scanf()中清除輸入緩沖區的幾種方法歸納,scanf緩沖區

scanf()中清除輸入緩沖區的幾種方法歸納,scanf緩沖區

編輯:關於C語言

scanf()中清除輸入緩沖區的幾種方法歸納,scanf緩沖區


應用場景:我們使用多個scanf()的時候,如果輸入緩沖區還有數據的話,那麼scanf()就不會詢問用戶輸入,而是直接就將輸入緩沖區的內容拿出來用了,這就導致了前面的錯誤影響到後面的內容,為了隔離這種問題,

 

總的思想:通過各種方法將輸入緩沖區的內容讀出來.

方法一:使用scanf(“%*[^\n]%*c”):成功; 解釋: 1.這裡的星號’*’表示讀入某類型的內容,但是這個內容不保存到變量裡,所以後面不需要對應的參量; 也就是說,只要我再%後面加入星號之後,後沒可以不放置接收的變量. 2.scanf(“%*[^\n]%*c”)的%*[^\n]表示讀入除了回車之外的字符以及讀入一個字符後不保存,只有這樣,才不會把我輸入回車吸收,導致我不能退出程序.但是按照這種方法應該%*s應該也行,但是不行,具體不知道為啥. 3.[]內是只讀入限定讀入的字符,如:[abcd]指的是只讀入abcd的字符 4.所以整行代碼的解釋是"%*[^\n]"首先讀入緩沖區的剩余內容,%*c是讀入最後一個沒有讀入的回車;這樣就清空的輸入緩沖區. 方法二:使用fflush(stdin)不成功,估計和系統的機制有關,有人測試vc是ok的,但是xcode和linux系統下都不成功; 方法三:使用getchar+while成功; 使用while(getBuff=getchar()!=‘\n’ && getBuff!=EOF),使用循環把緩沖區的讀完,直到讀到緩沖區的\n或者是空值; 方法四:使用gets+預留最大值成功; 使用gets,創建一個數組,將緩沖區的內容讀完; 方法三方法四都是使用流的方式,把剩余的東西一並讀完,管他是不是\n,還是這個比較舒心 方法五:rewind(stdin),這個在xcode可以,真是奇怪,rewind是移動指針到開頭是可以,清空輸入不可以,真是奇了怪了;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved