利用(while(getchar() != ‘\n’);)消除斷行符號

來源:互聯網
上載者:User

才疏淺陋,如有不足之處,歡迎拍磚....

還在學習C的基礎,今天看到了書上的樣本程式中使用while(getchar() != '\n');來消除斷行符號(確切點說應該是去除分行符號)。

剛開始很不理解,為何這個語句能夠去除分行符號,詳細過程是什嗎?為什麼在一些情況下也可以清除斷行符號前的所有的非法輸入?

搜尋了前輩們以前提出的相關問題,重新看了getchar()函數的功能註解以後,慢慢理解了while(getchar() != '\n');的過程。

下面用書上的那個樣本程式來說明:

#include <stdio.h>#define INPUT_LINE_LENGTH40int main(void){FILE *outputFile = NULL;int quitChar;char inputText[INPUT_LINE_LENGTH];outputFile = fopen("outfile.txt","w");if(outputFile){for(quitChar = 'N'; (quitChar != 'y' && quitChar != 'Y'); ){printf("Enter a string of no more than 40 characters\n");printf(">>>");gets(inputText);fputs(inputText,outputFile);fputc('\n',outputFile);printf("\nQuit?(Y/N): ");quitChar = getchar();//本例的while(getchar() != '\n');就屬於可以消除非法輸入的類型while(getchar() != '\n');putchar('\n');putchar('\n');}fclose(outputFile);}return 0;}

其他地方沒有什麼好說的,很簡單。主要介紹下面兩句:

quitChar = getchar();while(getchar() != '\n');

為了弄清有哪些操作,應該先瞭解getchar()函數的行為,下面是引用百度百科的介紹:

getchar():

當程式調用getchar時.程式就等著使用者按鍵.使用者輸入的字元被存放在鍵盤緩衝區中.直到使用者按斷行符號為止(斷行符號字元也放在緩衝區中).
當使用者鍵入斷行符號之後,getchar才開始從stdin流中每次讀入一個字元.
getchar函數的傳回值是使用者輸入的第一個字元的ASCII碼,如出錯返回-1,且將使用者輸入的字元回顯到螢幕.
如使用者在按斷行符號之前輸入了不止一個字元,其他字元會保留在鍵盤緩衝區中,等待後續getchar調用讀取.也就是說:
後續的getchar調用不會等待使用者按鍵,而直接讀取緩衝區中的字元,直到緩衝區中的字元讀完為後,才等待使用者按鍵.

好了,開始正式解釋這上面兩句程式。

quitChar = getchar();

為了方便解釋,假定輸入為:NYYN'\n'(代表NYYN“斷行符號”)

這句使用了getchar()函數,所以quitChar的值被賦值為getchar函數的傳回值是使用者輸入的第一個字元的ASCII碼,即78.

程式繼續向下運行,開始執行

while(getchar() != '\n');

因為鍵盤緩衝區中還存放著輸入的YYN'\n'(N已經被取走),所以while迴圈開始繼續利用getchar()函數來逐個讀取鍵盤緩衝區的剩餘字元。

最後當getchar()遇到'\n‘時,while()迴圈條件不成立,迴圈結束。

就這樣非法輸入的 YYN 和最後的 '\n' 就被該語句消耗掉了,任務完成。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.