初学c语言的一个搞不清楚的问题

有一个例子:输入一行字符号,统计其中有多少个单词,单词子间用空格分开.
#include <stdio.h>
void main()
{
char string[81]
int i,num=0,word=0;
char c
gets(string);
for(i=0;(c=string[i]!='\0';i++)
if(c=='') word=0;
else if(word==0)
{
word=1
num++
}
printf("there are %d word in the line.\n".num);
}
我的问题1:if(c=='') word=0;这句中 word的值为0,那么下一句else if(word==0)应该是否定了上一句,那么为什么还会出现wrod==0 ????这两句是说如果c为空格那么word=0;;c不是空格(如果word=0)怎么可能???就好象是在说如果你是喝了水,那么水会流到你肚子里;;你没喝水(如果水流到了的肚子里),没喝水水怎么会在肚子里???这是怎么一回事哦请解释一下哈.
问题2:请把这到题的设计思路说一下.谢谢~~~~~^^说的好我还会加分.
for(i=0;(c=string[i]!='\0';i++) 我少打了个括号,
应该是for(i=0;(c=string[i])!='\0';i++)

这个程序是要好好思考下才能弄懂
解题的思路是这样的:单词的数目可以由空格出现的次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内).如果测出某一个字符为非空格,而它前面的字符是空格,则表示"新的单词开始了",此时使num(单词数)累加1.如果当前字符为非空格而前面的字符也是非空格,则意味着仍然是原来那个单词的继续,num不应该累加.前面一个字符是否空格可以从WORD的值看出来,若WORD的值等于0,则表示前一个字符是空格;如果word等于1,则意味着前一个字符为非空格.

你可以结合一个具体的例子来看一下就好理解了,
例如: 输入的字符串为:
"I am a boy."
注意是从头一个字符一个字符处理的语句:
for(i=0;(c=string[i]!='\0';i++)
对字符开始处理:
当前字符=空格?
1、成立 未出现新单词,使WORD=0,num不累加。
语句:if(c==' ')word=0;来实现。
2、不成立(两种情况)
A、前一字符为空格(word=0),新单词出现,使num加1,word=1
语句:else if(word==0)
{
word=1
num++
}
B、前一字符为非空格(word=1),未出现新单词,num不加1。

在语句:else if(word==0)
{
word=1
num++
}
中如果word=1则不执行word=1; num++;

这个程序主要是把一个字符串放在一起来考虑,因为它们是前后是有联系的主要的是word的值的变化。
自己结合一个具体的实例来分析一下就好了
例如:" I am a boy!"
程序是这样执行的:
1、读入第一个字符:空格
满足条件:if(c=='') word=0; 则word=0
2、读入第二个字符:I
满足条件:else if(word==0)
{
word=1
num++
}
表明出现一个新单词 注意 此时 word=1 num=1
3、读入第三个字符:空格
满足条件:if(c=='') word=0; 则word=0
注意前后WORD值的变化
4、读入第四字符:a
满足条件:else if(word==0)
{
word=1
num++
}
此时word=1,num=2
5、读入第五个字符:m
注意 这时 m既不是一个空格而word=1
不满足条件:
if(c=='') word=0; 则word=0
也不满足条件:else if(word==0)
{
word=1
num++
}
则什么都不做num仍然等于2。
.
.
.
依次类推。
我教学生这个题目也花了我不少的时间呵!都是我一个字一个字的输进去的希望对你有所帮助。加油同学!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-26
这很好理解啊
if(c=='') word=0;这句的意思是判定c是否为null(空),如果为null,则重新给word赋值为0,然后跳过else if直接输出;
else if(word==0) 这句是在上一句的基础上,要是if条件不成立,则直接判定word是否为0,是,做{}内的内容
以此类推,知道for循环判定c遇到'\0',跳出循环,输出结果
第2个回答  2008-06-26
for(i=0;(c=string[i]!='\0';i++) 这句貌似少了个括号 for(i=0;(c=string[i]!='\0');i++)
该语句后面你没哟根{},所以你的for循环其实只能判断if(c=='') word=0; (也不知道''由空格不希望你是打错了)
#include <stdio.h>
void main()
{
char string[81]
int i,num=0,word=1;
char c
gets(string);
for(i=0;(c=string[i]!='\0';i++)
{if(c==' ') word=0;
if(word==0)
{
word=1
num++
}
}
printf("there are %d word in the line.\n".num);
}

该题中有许多,逻辑问题,你仔细想想就会明白的
第3个回答  2008-06-26
题没抄错吧
相似回答