2012-11-12 31 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

您的控制台是行缓冲标准输入。这意味着你的程序将不会收到任何输入,直到你点击返回,它将收到编辑的文本,而不是按键的实际顺序。