for(i=0;(c=string!='\n';i++)应改为for (i=0;(c=string)!='\0';i++)因为键盘输入的回车符'\n'是不包含在字符串中的,字符串以'\0'标志结束.条件(c=string)!='\0'是检查是否已经扫描了字符串的全部内容.if(c==' ')word=0; /* */ else if(word==0) /* */ {...}这段语句中的word用来标记前一个扫描过的字符的类型.如果word=1,则表示前一个字符是字母,也就是当前单词的一部分,否则表示前一个字符是空格,即单词的分隔符.另外需要指出的是,这段程序并不能准确地计算出一行输入中的单词个数.因为按照以上程序的逻辑,当一个单词长度大于1时,则会重复计数,造成结果的误差.可以将for循环改写成以下形式,方可计算出一行内的单词个数:#include /*后面会用到一个判断字符类型的函数,应在程序开始时包含此头文件*/for (i=0;(c=string)!='\0';++i){if (isalpha (c)) /*如果c是一个字母,则条件成立*/{if (word==0) /*如果前一个不是字母,即不是此单词的一部分*/{num++; word=1; /*为当前单词进行标记,以免重复计数*/}}else /*标记当前字符为分隔符*/word=0;}
|