3

当我在 K&R 上练习时,我发现了一个非常有趣的问题:

代码如下:


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变量的值也不会改变。但实践的结果与我的推测不同,实践的程序如下:

第一步:输入第一个空格 在此处输入图像描述

第二步:使用退格键删除空格 在此处输入图像描述 第三步:完成剩余字符的输入 在此处输入图像描述

为什么结果是 3 而不是 4?为什么按下退格键会改变 bn 变量的值?

请给我一些想法,谢谢!

4

1 回答 1

12

您的控制台是行缓冲标准输入。这意味着您的程序在您点击 之前不会接收任何输入Return,并且它将接收编辑后的文本,而不是实际的击键序列。

于 2012-11-12T09:33:09.000 回答