在循环条件中有些问题我实在想不通,有些问题想通了感觉还是迷糊的,就今天因为顺序的问题我就想了半天,还是有个说服自己的理由吧
#include<stdio.h>
int main()
{
char c;
int letters=0,space=0,digit=0,other=0;
printf("请输入一行字符:\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
other++;
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);
return 0;
}
上面这个程序中,c=getchar()能不能放在循序里面最开始的部分?我怀着好奇的心试了试,最后输出的other总是多一,这是为什么?为什么会这样?后来想了那么久就是不明白,晕晕的感觉,DEV C++里面有个调试的功能,其实我就是今天才学会的!试了好几遍,又是自己各种想象,我就是这么认为的,如果将c=getchar()放在循环里面,那么就跳过了判断,当最后输入回车的时候,程序会认为输入了其他的字符,而c=getchar()在程序的里面,肯定是先经过一轮的循环导致other加一后遇到(c=getchar())!='\n'终止循环!那么将c=getchar()放在other++后,也就是循环的末尾可以吗?我有带着疑问去调试了,很明显出现个大问题啊,循环开始的时候没办法输入字符啊,不过不要惊慌,我还是想到办法了呢,在while前一行加个在c=getchar()就OK啦,这样程序就有恢复正常了,确实,这种方法要比上面程序中的复杂一点点!
那么能不能用do...while呢?应该是不行的吧,do...while程序是先执行一轮再判断,这样应该很不合适啊!