scanf(),getchar(),gets()區別與用法

這幾個常見的輸入函數時常困擾着初學編程的人,簡單介紹一下區別與用法。

一、scanf();本人最常用,基本格式就是scanf(“%d,%c”,&a,&b);輸入的數量可以繼續擴充,能夠將鍵盤輸入以不同格式保存在變量裏,功能強大。

注意點:

1、不要忘了加“&”,這個取地址符很重要,表明數據要放到這個地址去,有人經常丟;

2、scanf(),判斷輸入結束的標誌是空格和回車,所以輸入字符串時,若中間有空格,空格後面的字符輸入不進去,因爲scanf已經停止輸入了;

3、不要在scanf()中加入一些雜七雜八的格式字符,比如scanf("a= %d",&a);"a="就是自己給自己找麻煩,輸入者誰會知道你要求輸入“a=”?

二、gets(),輸入字符串的好幫手,當你的字符串中有空格時,就別想scanf了,gets(abc);就可以解決這個問題,abc是個字符數組,用來存字符串,鍵盤上的輸入以回車爲止;

注意點

1、gets()一次只能輸入一個字符串,不像scanf()那樣連續給好幾個變量賦值;

2、主要用在字符串的輸入上,其它類型不考慮

三、getchar(),得到一個字符,當你只想讓用戶輸入一個字符時,可以考慮用它,它只接受一個字符,其餘不要,比如讓用戶判斷yes or no 時,你只想讓用戶輸入Y 或者N時。

注意點

1、只接受一個字符

2、數據格式僅爲字符,數字也會被當做字符。


再補充一點:

不管用哪個函數來進行鍵盤輸入,一個好習慣就是及時清除鍵盤緩衝區,因爲用戶很可能不按照你給的的格式敲鍵盤,有些時候即使是最後的那一個“回車”也會在鍵盤緩衝區留下一個字符,影響後續的輸入(之後使用scanf等函數時很可能先讀入的是回車),爲了消除最後一個回車的影響,一些方法是在scanf前多寫一個getchar()去吸收這個回車,有些是寫在scanf()後,這要根據不同程序自行設定,但有時還會存在一種情況,就是無論放在前還是放在後,getchar()總會不小心將正常的鍵盤輸入“吃掉”一個字符(原本設計的是吃掉回車符),這一點也很好理解,因爲它是一個輸入函數,鍵盤緩衝區的字符是否多餘完全需要你自己去判斷。

另一個方法就是用fflush(stdin);這個語句就是清除鍵盤緩衝區數據,個人感覺,如果你的程序不需要跨到linux上去的話,只是交交作業練練手,最好用這個,放在scanf前面就好,這表示當你開始一次鍵盤輸入時,鍵盤緩衝區是乾乾淨淨的,很省心。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章