继续上一个问题,各位高手老师前辈请进(原谅我的钻牛角尖)
原程序#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 编辑 ]