关于if和else if的问题

书上有个题诗输出一行字符,统计有多少个单词
#include<stdio.h>
void main(){
char string[81];
int i,num=0,word=0;
chrar c;
get(string);
for(i=0,(c=string[i])!='/0';i++)
if(c==' ') word=0;
else if(word==0)
{
word=1;
num++;
}
printf("There is %d words in the line.\n",num);
}
我想问else if后面怎么就不再跟一个else了,难道它不用判断word==1时是做什么的,就自动的i++了吗,程序我倒是没运行,书上应该是正确的吧,如果当前字符不是空格,而word又不等于0的话怎么办,我觉得应该要多个else来判断吧,请高人解释
刚刚接触的C,所以还有些地方不是很懂,以下2位解释得很到位,其实我还想问的是if,else if,else的搭配,if语句不是3种形式吗:
1.if()...;
2.if()...;else...;
3.if()...;else if()...;else...;
上面的根据语法是不是应该认为if(c=='')word=0;之后的是else{if(...){...}}这样子的啊,是的话不应该加个括号吗?可不可以吧else去掉啊,就2个if在上面会怎么样?求解释,要不以后遇到更难判断的就不会搞了,我会加分的,谢谢

我基本明白你的疑问是什么了。
注意,if语句的结构是:
if(){}
[else if(){}]
[else if(){}]
[...]
[else{}]
也就是说:else if(){}和else{}的出现没有本质联系。可以进行任意的组合。而这是时一条if语句。
如果按LZ举的例子
if(){}
else{
if(){}
}
这就是两个if语句的嵌套了,虽然执行逻辑没有区别。
-------------------------------------------
这实际上是一个状态机。有两块程序:
1.在c==' '时
word=0;
2.在c!=' '且word==0时
word=1;
num++;
其状态就是word。在word==0时,表示c不处在单词上;word==1时,表示c处在单词上。其策略是每遇到一个单词开始,就num++;,而单词开始的标志就是上一个状态还处在word==0,而且c不是空格。
所以,逻辑表明,程序与word是否为1没有直接的关系。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-26
不是空格就不执行,就像判断奇偶数,是奇数那奇数的计数器加一否则偶数的加一,不用判断不是奇数那在判断一下偶数。
void main(){
char string[81];
int i,word=0;
chrar c;
get(string);
for(i=0,(c=string[i])!='/0';i++)
{
if(c==' ')
word += 1;
}
printf("There is %d words in the line.\n",word);
}
相似回答