北欧原木鞋柜衣架一体:帮我看一下这个程序吧?

来源:百度文库 编辑:高校问答 时间:2024/04/28 15:45:47
#include<stdio.h>
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 words in the line.\n",num);
getch();
}
这个程序的作用是你输入一段话后,统计其中单词的多少,您看看这个程序对不对,如果对,能否告诉我,这个程序是怎么运行的,怎么能起到这个作用。尽量详细点,谢谢!

程序理论上是正确的.
char string[81]; 定义一个字符串用于放你将输入的一段话.
int i,num=0,word=0;i用来控制循环,num用来寄放单词数,word随后遇到再详细讲.
char c;字符c用来放你输入的话的每一个字母,随后会细讲.
gets(string); gets语句是用来键盘输入的,运行后,通过它由你来输入一段话到string中.
for(i=0;(c=string[i])!='\0';i++) 中先赋初值令i=0,随后判断,string[i]是否不等于\0,此处的\0是你输入的那段话的结尾标记,它是有系统自动加在末尾处的,如果不等于则把此时的值赋给c,如果等于跳出循环.最后用i++来让c得到你出入的话里所有的字母.
如果c=string[i])!='\0'成立,便进入循环.
if(c=='')word=0; 1
else if(word==0) 2
{
word=1; 3
num++; 4
}
第一次循环应该是直接进入2的,因为基本上不会有人输入句子时一上来就按空格的.进入2后word确实等于0,所以进入下面循环,使word变为1,同时在num中记下有了第一个单词.随后继续循环.
接着需要你的一点想象了,如果说,接下来进入循环的是刚才判断出来的那个单词的第二个字母,那么它肯定不符合1中的条件,对了,1是用来判断是否为空格的.而word已变为1了,所以2有不符合.直接再进入循环,一直要到第一个单词结束,出现空格,系统才会执行语句1,使得word再度变为0.随后遇到了第二个单词的第一个字母,它又会跳过1,直接进入2,因为word在前一次循环已变为一,所以可以执行3和4.在3中word又变成了1,num记下有两个单词,系统又将不执行任何语句而不断循环,直到第二个单词结束.依次类推.直到遇到结束标志\0.
getch()只是读入一个字符,如果没它的话,你是看不到答案的,输入完句子便离开蓝屏了,有了它,系统会在那等你,知道你输入任意值再离开.
如果你是做考卷的话,这样写是完全正确的.有些系统会把\0误认为是空格,所以答案回变成1,不过你不用管.任何一本教材都会说你是对的.

遇到空格算一个单词,程序应该有问题,c==''那里应该是!=才对,两个单引号中间是空格,word变量用来跳过连续空格和单词字母,遇到空格时设置word变量为0,然后继续向后搜索字符,遇到第一个非空格的字母时单词数num加1,并设置word为1,再遇到空格时重复以上过程,没有调试程序,只是看的,有错的话请见谅

getch()函数没有定义啊