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 不太清楚
...全文
56 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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'分隔形成一个单词

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧