C程序设计一道例题请教

IcanIbelieve 2004-04-29 09:22:16
#define OUT 0
#define IN 1
#include<stdio.h>
main()
{
int nl,nw,nc,state,c;

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);
}
这道程序中计算行数,单词数,还有字符数这个程序好像没问题,但是为什么运行的结果和实际不符呢。另外请解释一下这个else if 循环state == out里面是
state = IN 不太清楚
...全文
21 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
catlan 2004-04-30
The C Program Language 上的例题,很简单,看书便可。
  • 打赏
  • 举报
回复
i33333 2004-04-29
“也不是字符数”
/ / / / // ///
空字符也是字符啊,源程序中也是这样认为的啊。。icelover(C++) pen slip吗??

此时把stat设为OUT是对应“从一个单词中out了”。。。。
  • 打赏
  • 举报
回复
icelover 2004-04-29
我记得这个程序是华工的C语言上面的一道题目,应该没有问题啊,
因为前面的if是判断c是否为空格,回车,Tab,如果是的话,就说明当前读到字间相邻的部分了,此时读入的既不是单词数,也不是字符数,因此把状态设为OUT,然后else说明此时读入的不是空格,回车或tab,说明正在读入一个单词中的一个字符,此时检查状态是否为out,如果是,说明是刚进入这个字,因此要把状态设为IN,并把单词数加1
  • 打赏
  • 举报
回复
sueprljy 2004-04-29
main()
{
int nl,nw,nc,state;
char c;
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;
}
if (c=='.')break;//用来结束循环
}
printf("%d %d %d\n", nl, nw-1, nc-1);//减1是为了去掉'.'的影响
}
IN是指获取字符串时,一个新的单词的开始,单词数加1;OUT是指由于' ''\n''\t'分隔形成一个单词
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-04-29 09:22
社区公告
暂无公告