| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 723 人关注过本帖
标题:继续上一个问题,各位高手老师前辈请进(原谅我的钻牛角尖)
只看楼主 加入收藏
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:10 
继续上一个问题,各位高手老师前辈请进(原谅我的钻牛角尖)
原程序
#include "stdio.h"
main()
{
 int c=0;
 printf("Please input sentence:\n");
 while(getchar()!='\n')
 {c++;
  if (getchar()=='')
  c--;
 }
 printf("The sum of sentence's characters is:%d",c);
 getch();
}
目的是为了统计字数,但空格不统计,结果是错误的,有个高手给了如下解释:
getchar会读取流中的字符,也就是说如果你的字符流中有这样一串字符:"abcdef"。你调用一次getchar,字符流的第一个字符就被读取了,现在剩下了"bcdef"
你输入wee,在while((a=getchar())!='\n')读取了w之后,现在的字符流里剩下的是ee,然后进入循环体,
  c++; C = 1
  if (getchar()=='')又读取一次,现在字符流里只剩下e
  c--; //不执行,C = 1
 }下一次循环
while((a=getchar())!='\n')读取e,现在字符流里没有字符了(只有一个回车符)
进入循环
 c++; C = 2
  if (getchar()=='')又读取一次,读取了\n字符
  c--; //不执行,C = 2
 }下一次循环
要继续的输入,因为字符流已经为空,需要按下一次回车才能结束循环
这位高手解释得非常清楚了,比对wee输入确实是这样,但是,我在比对w e e时却又有些遗憾,以下是我的分析:
输入w e e在while((a=getchar())!='\n')读取了w之后,现在的字符流里剩下的是 e e,然后进入循环体,
c++; C = 1
  if (getchar()=='')又读取了一次空格,现在字符流里只剩下e e
c-- C=0
下一次循环,while((a=getchar())!='\n')读取e,c=1,循环getchar再读空格,c=0
又一次循环,while((a=getchar())!='\n')读取e,c=1,循环getchar读回车c--不执行
再执行一次回车(两次回车的问题我彻底明白了),显示结果按这样理解应该返回c=1啊,可为什么最后结果是3反而正确了呢?

已经结贴了,谢谢大家,我的分析至少还是对的,呵呵,只要能进步,我就开心


[ 本帖最后由 account 于 2010-4-14 15:46 编辑 ]
搜索更多相关主题的帖子: 统计 include 
2010-04-14 14:32
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
请各位能够分享你们的智慧!谢谢了
2010-04-14 14:42
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
在此谢过了!!!
2010-04-14 14:53
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:0 
你的‘'里面没有空格啊
不过我感觉很奇怪啊,我用的是VC所以没有空格会报错,你的怎么不会啊

[ 本帖最后由 一口三个汉堡 于 2010-4-14 15:13 编辑 ]

坚持做对的事情,而不是容易的事情。
2010-04-14 15:08
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
我用的是WIN-TC...编译器不同可以理解,但你的VC咋都不承认我的空格是空格呢?
2010-04-14 15:15
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:15 
你确定你的里面有空格吗?

坚持做对的事情,而不是容易的事情。
2010-04-14 15:16
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
是的,肯定是有空格啦
2010-04-14 15:20
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
汉堡大哥,不用看啦,我已经知道啦,我写了两个C文件,调用好的,出来好的结果,调用不对的出来结果是1,刚刚才发现。。。从周日开始学习C,到现在,每天坚持白天看数据结构,和C,晚上看英语,把人脑子弄晕啦。。。非常感谢,你的提示让我突然发现我一直编译的界面文件名不对。。。
非常感谢
2010-04-14 15:24
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:0 
我用TC试了下,没问题啊,WIN-TC的内核也是TC2.0。你重新打个空格

坚持做对的事情,而不是容易的事情。
2010-04-14 15:26
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:0 
哦,对了就好

坚持做对的事情,而不是容易的事情。
2010-04-14 15:27
快速回复:继续上一个问题,各位高手老师前辈请进(原谅我的钻牛角尖)
数据加载中...
 
   



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

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