C语言 单词计数程序求教~

来源:百度知道 编辑:UC知道 时间:2024/06/25 04:47:40
有一单词计数程序:
#include <stdio.h>

#define IN 1
#define OUT 0
main()
{
int c,nl,nw,nc,state;

state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF){
++nc;
if (c == '\n' )
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT){
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
那么:
1.请帮我仔细解释一下else if 往后所有语句的意思。
2.为什么else if的表达式(state == OUT)里面要用==阿?
谢谢大家了,如果解释的让我很明白,多多加分。

1
程序逻辑上貌似有点问题,
因为如果当前输入的字符为空字符(空格,回车,制表符)state就改称out

大体是说else if
当前state指示说明上回输入的字符为空字符
那么先改变state的状态到 IN 就是告诉系统这个空字符我计算过了,过时了
然后空字符计数器加一

2
=是赋值符号! a=b就是将b的值赋给a
==是逻辑运算符 用来比较a b相等与否,相等true否则false

如果用state=out那么else if等同于先执行state= out,然后esle if(out),就是永远为假,可以直接去掉其子句。

else if (state == OUT){
state = IN;
/*state为单词输入状态标识符,与OUT进行判断值是否相等,要用到运算符"==",赋OUT时表示单词输入结束,赋IN时表示正在输入单词,当输入的字符不是空格\回车\制表符时,进入单词输入状态*/
++nw;
/*nw是单词计数变量,当上一个单词输入结束进入下一个单词输入状态时,计数变量自加*/
}
}
printf("%d %d %d\n", nl, nw, nc);
/*当输入-1时,表示单词输入结束,结束WHILE循环,最后进行统计输出,nl是行数统计,nw是单词总数,nc是包括空格\回车\制表符的总字符个数*/
}

#include<stdio.h>

#define IN 1
#define OUT 0
main()
{
int c,nl,nw,nc,state;

state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) //读字符 以ctrl + z结束输入
{