2012-11-12 28 views
3

當我做日K & [R實踐中,我發現了一個很有趣的問題:有關的getchar()函數的有趣做法

代碼如下:


include <stdio.h> 
main()                        
{                         
    int c; 
    int bn; 
    bn=0; 
    while((c=getchar())!=EOF)                  
    {                        
     if(c==' ')                     
     bn++;                     
    }                       
    printf("blanks counter:%d\n",bn);                
} 

碼功能是統計空格的個數

我一次輸入所有單詞,沒有使用退格鍵,它是完成。


$ ./a.out 

I have a dream 

blanks counter:3 

但是,如果我用退格鍵,發生什麼事可能在輸入過程?

我推測當一個空格鍵被按下時,getchar()函數應該得到這個事件,然後執行bn ++,所以即使我稍後按退格鍵刪除這個空格,bn變量的值也不會改變。 但實踐的結果是我的猜測不同,實踐PROGRAME如下:

第一步:輸入第一blankspace enter image description here

第二步:使用退格鍵刪除thie blankspace enter image description here 的第三步:完成剩餘的字符輸入 enter image description here

爲什麼結果是3而不是4?爲什麼bn變量的值會被按退格鍵改變?

請給我一些想法,謝謝!

回答

11

您的控制檯是行緩衝標準輸入。這意味着你的程序將不會收到任何輸入,直到你點擊返回,它將收到編輯的文本,而不是按鍵的實際順序。