【C語言】getchar函數的控制台輸入原理,斷行符號符的處理

來源:互聯網
上載者:User

getchar函數的功能是從輸入資料流讀取一個字元,這是我們要明確的就是:

我們在控制台需要輸入至少兩個字元才能保證這個函數的執行:

例如:

來源程式:

char ch;

ch = getchar();

我們需要在標準輸入資料流裡面輸入   ”w 斷行符號“,就是需要至少輸入兩個字元,一個是接受的正常字元,另一個就是斷行符號分行符號,這個斷行符號符的作用就有些像觸發器,只要輸入了斷行符號符來源程式就會進行一次執行,如果在輸入資料流中一次輸入了足夠多的數,那麼以後就不用輸入了,因為來源程式裡面的所有接受輸入資料流的函數都會自動從這個輸入資料流緩衝區裡面讀取資料。


比如baidu一位網友問的問題,非常好:

 

scanf("%c",&a); // 向a輸入一個字元gets(b);             //向b輸入一個字串gets(c);             //向c輸入一個字串當我輸入一個字元到a後,斷行符號怎麼會直接跳到輸入字串c我調試看了下,它會自動在a輸入完後,向b輸入字元'\0'這是為什麼了??


原因就是,開始的時候輸入了兩個字元,斷行符號符觸發了程式的運行,當程式讀完第一個字元後,就把第一個字元賦值給了 scanf函數,接著那個斷行符號符就被gets(b)讀去了,再接著緩衝區空了,這是就自然又要使用者從輸入資料流中輸入字元並以斷行符號結束。

 

getchar函數和scanf函數一樣。

目前我知道的解決的辦法有兩個:

1 可以在這兩個函數後面 加一個讀取那個斷行符號符的函數,getchar();

2 如果是scanf()函數可以 直接寫讀入斷行符號符  scanf("%c\n",&a);主要是添加 格式字串後面的那個 \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.