我在写一段这样的代码:
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
#include<stdio.h>
int main()
{
int i,num=0,word=0;
char c,string[100];
gets(string);
for(i=0;(c=string[i])!='\0';i++)
{
if((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z'))
{
num=1;
}
else
{
num=0;
word++;
}
}
printf("the word has %d words.\n",word);
return 0;
}
这段代码输出是正常的,能够统计出有多少个单词。
但是下面这段代码就输出得不正常了。
#include<stdio.h>
int main()
{
int i,num=0,word=0;
char c,string[100];
for(i=0;(c=getchar())!='\n';i++)
{
if((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z'))
{
num=1;
}
else
{
num=0;
word++;
}
}
printf("the word has %d words.\n",word);
return 0;
}
就处理输入数据那里作了改动而已,出这差错的原因是什么啊
第二个版本的char数组string根本没有用来读取输入啊,(c=getchar()这个才是用来读取的变量,应该使用c来判断)还停留在定义时的状态,你却用来作为条件判断了,由于其内容为undefined的状态,所以
if((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z'))这个判断有很大可能为假,所以增加了计数器。实际效果相当于是数整个输入有多少个字符(包括空白字符)