你是想用word来做标志位?来判断是字母还是别的字符?for后面多了一个;分号
#include
void main()
{
char a[100],c;
int i,word=0,num=1;
gets(a);
for(i=0;(c=a[i])!='\0';i++)
{
if(c==' ')
word=0;
else
continue;
if(word==0)
{
word=1;
num++;
}
}
printf("%d\n",num);
}
printf("%d\n",num);
}
主要问题在 for(i=0;(c=a[i])!='\0';i++); 这行的分号上,这里加了分号等于在这个循环中程序不执行任何操作!当然后面花括号中的语句也不会执行。还有个小问题,按你的写法,num的初值应为0。
下面是我改进的代码,自己比较优劣
#include
void main()
{
char a[100],c;
int i,word=1;
gets(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]==' ') word++;
}
printf("%d\n",word);
}
满意请采纳~
逻辑问题 看你for里面的循环,如果遇到了一个空格,那么word=0,我猜你是希望在word=0之后,继续执行下面的elseif语句吧,这是不可能的。从语法方面上讲:else if 与if之间只会执行一个,因为else if执行的条件有两个:1.if(c == ' ')不成立,就是之前if语句不成立
2.就是自身条件:word == 0;如果你想让他执行完第一个if,还要执行else if ,那么 把后面的elseif 合并到第一个里面。
除此之外,你的程序还有一个问题,你有没有考虑过假如输入的第一字符就是空格,或者连续输入很多空格,你这种以空格个数判断单词个数的方法就很受制约了,计算出的字符个数岂不是很不准确。