while(getchar()!='n'); -- 應當是 while(getchar()!='\n'); 這是不斷循環(huán)取字符,直到取到 Enter 鍵時結束循環(huán)。作用,清除上面一次輸入時殘留在輸入流中的字符。
為鐵嶺縣等地區(qū)用戶提供了全套網頁設計制作服務,及鐵嶺縣網站建設行業(yè)解決方案。主營業(yè)務為成都做網站、成都網站建設、鐵嶺縣網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
改用 fflush(stdin); 更佳。
ret = scanf("%d,%d",a,b); ret 為成功讀得的數據個數。
清除的緩沖區(qū)中的殘留數據: if (ret != 2) fflush(stdin);
最簡單的是用fflush()函數。
此函數包含在stdio.h頭文件中,用來強制將緩沖區(qū)中的內容寫入文件。
函數原型:int fflush(FILE *stream) ;
函數功能:清除一個流,即清除文件緩沖區(qū).
常用場合:
一、ff(stdin)刷新標準輸入緩沖區(qū),把輸入緩沖區(qū)里的東西丟棄
fflush(stdout)刷新標準輸出緩沖區(qū),把輸出緩沖區(qū)里的東西打印到標準輸出設備上。
二、scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,并按回車后結 束)。
① 遇空格、“回車”、“跳格”鍵。
② 遇寬度結束。
③ 遇非法輸入。
鍵盤緩沖區(qū)就可能有殘余信息問題。
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數之后加個fflush(stdin)
三、寫文件的時候 不會馬上進行物理磁盤的文件讀寫,而是先寫入緩存,當緩存中內容達到一定程度后再寫
FILE *fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
如果緩沖區(qū)是在棧里分配的話是不需要清除的,因為系統(tǒng)會幫你做這個工作,但是如果緩沖區(qū)是分配在堆里的話就要自己手動清除了,不然會發(fā)生內存泄露,就是雖然不使用,但占用的資源仍然不能釋放,會影響系統(tǒng)性能。
清除緩沖區(qū)有三種方法:
方法一:
fflush(stdin);
fflush(stdin)在VC上可以使用,但是其他編譯器不能保證對fflush的實現(xiàn)。
方法二:
setbuf(stdin, NULL);
setbuf(stdin, NULL);是使stdin輸入流由默認緩沖區(qū)轉為無緩沖區(qū)。但緩沖區(qū)沒有了。
方法三:
char ch;while((ch = getchar()) != '\n' ch != EOF);
這種方法是最好的方法,因為它使用的是C語言的基本語法,在什么情況都是支持的。