标题:字符计数程序的问题
取消只看楼主
文若千寻
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-29
结帖率:100%
已结贴  问题点数:20 回复次数:3 
字符计数程序的问题
看书上的字符计数程序,自己也写了一个.如下:
# include <stdio.h>
int main(void)
{
    int i, c;
    i = 0;
    c = getchar();

    while(c != EOF){     
        ++i;
        c = getchar();
        printf("i=%d\n",i);  
    }
    return 0;
}

    运行后,我输入了"123"三个字符然后回车,出来的结果是i=1 i=2 i=3,按照这个程序,应该还有个i值为4,为什么没有显示出来
    然后我按了EOF的快捷键,显示了个 i=4的结果,为什么我输入的是EOF,printf程序还是把i=4显示出来了.
    真是百思不得其解啊!!

    另外我也写过
    printf("i=%d\n",i);
    c = getchar();
    }
    这个我推算的结果和输出的是一样的.现在我就是想知道 当c=getchar()在printf()前面的时候为什么会是这个结果?
搜索更多相关主题的帖子: return include 快捷键 
2015-07-29 13:06
文若千寻
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-29
得分:0 
回复 2楼 kenierlee
第一次我知道是取了2个字符,是在 c=getchar()这句取的第二个个字符吗么?
我算的经过是            循环 第一次    第二次    第三次        第四次   
    变量c在while条件句中的值    1        2        3            '换行符'

                        ++i     1        2        3              4

                变量c的新值     2        3        '换行符'        空的

            printf输出的i值     1        2        3              4

这结果应该是4啊

还有我输入EOF后c不是被赋为EOF了 这条件就不成立了 为什么还是执行了printf这句
2015-07-29 13:43
文若千寻
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-29
得分:0 
回复 4楼 hjx1120
CTRL+Z 是这个吗
2015-07-29 13:48
文若千寻
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-7-29
得分:0 
回复 6楼 kenierlee
谢谢你的分析
现在我的问题是就是
// 第4次循环入口  c != EOF (成立,因为c='\n',进入循环)
 ++i;                 // i = 4
 c = getchar();       // c = EOF // 注意,这里程序阻塞,等待你输入EOF
 printf("i=%d\n",i);  // 输出:“i = 4”
// 第5次循环入口  c != EOF (不成立,因为c=EOF,循环退出)
 ...
return 0;
\
这第四次循环
我只能估计 c = getchar();       // c = EOF // 注意,这里程序阻塞,等待你输入EOF

是这一步对变量c赋不了值,所以后面的输出变量i也不会执行,而且

这次循环里的 ++i;                 // i = 4
也不会被执行,
因为后面我不输入EOF,改成输正常的数字比如12
再按回车执行 结果完全正确
如果在第四次循环中 i的新值被保留了应该是567吧.
但是结果是4  5  6

那是不是就是说 如果第四次循环中 c = getchar();  变量c取不了值,那么前面的++i 新值不存储和后面的printf也不会执行.
不知道我猜的原因是不是对的,我就是个新手,可能编的时候 写错顺序了,所以一直纠结这个问题,想弄懂,别鄙视......

再次谢谢你的帮助!!
2015-07-29 14:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-455892-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.456263 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved