下面两段代码的运行结果为什么不一样?
其中第一段代码能正常统计字母的个数,而第二段代码的结果很奇怪。
第二段代码的结果是:输入s,输出1;输入ss,输出2;输入sss,输出2;
输入ssss,输出3;输入sssss,输出3......
#include<stdio.h>
int letter=0;
int main()
{
char words;
while((words=getchar())!='\n')
{
if ('a'<words<'z')
{
letter++;
}
}
printf("字母个数:%d\n",letter);
system("pause");
return 0;
}
#include<stdio.h>
int letter=0;
int main()
{
char words;
while(words=getchar())
{
if ('a'<words<'z')
{
letter++;
}
if (getchar()=='\n')
{
break;
}
}
printf("字母个数:%d\n",letter);
system("pause");
return 0;
}
因为你第二个while中执行了两次getchar,你一次循环应该只读入一个字符,但是你读了两次,肯定不会对。
getchar不会帮你存储上次的读取结果,每调用一次读到的就是下个字符。
其次
if('a'<word<'z')
//这种写法不正确,必须写成
if('a'<word && word <'z')
你第一段代码运行正确是侥幸,因为你输入的字符都是小写且没其他字符,这种判断永远为真,因为它等效于
if(('a'<word)<'z')
等价于
if(true<'z'); if(1<'z');
//和
if(false<'z'); if(0<'z');
把现在的问题弄懂了就赶紧解决掉这个问题
letter+=1;