C Primer Plus程序清单7.7中inword标志变量求助

Mr丶纪 2014-12-09 01:36:52
我是个新手,在自学C Primer Plus时在程序清单7.7中遇到理解不透的问题
1.bool inword=false;//如果c 在一个单词中,则inword等于true
这个赋值无法理解,inword怎么判断的字符是不是在一个单词中呢?
比如 isspace(c),如果c是空字符结果为真反之为假,这种书中讲到过的有明确定义的我能理解,inword怎么实现的呢?
2.在百度上有人说这是标志变量,不懂这是什么意思,一直在看书,只看到有标识符,有系统保留关键字,标志变量是个什么概 念呢?怎么在书上没有学到?找了书中所有章节也没有关于这种概念的解释,求大神帮助。
3.prev='\n';这个已经赋值了,为什么后来还要prev=c?
各位大神们是我错过了什么章节吗?需要学习哪些知识才能掌握类似inword这种概念及用法?

程序清单7.7
// wordcnt.c -- 统计字符、单词和行
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#define STOP '|'
int main(void)
{
char c; //读入字符
char prev; //前一个读入字符
int n_chars=0L; //字符数
int n_lines=0; //行数
int n_words=0; //单词数
int p_lines=0; //不完整的行数
bool inword=false;//如果c 在一个单词中,则inword等于true

printf("Enter text to be analyzed(| to terminate):\n");
prev='\n'; //用于识别完整的行
while((c=getchar())!=STOP)
{
n_chars++;
if(c=='\n')
n_lines++; //统计行
if(!isspace(c)&&!inword)
{
inword=true//开始一个新单词
n_words++;
}
if(isspace(c)&&inword)
inword=false;//到达单词的尾部
prev=c; //保存字符数
}

if(prev!='\n')
p_lines=1;
printf("characters=%ld,words=%d,lines=%d.",n_chars,n_words,p_lines);
printf("partial lines=%d\n",p_lines);
return 0;
}
...全文
321 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-12-09
  • 打赏
  • 举报
回复
参考《编译原理》中的词法分析和有限状态自动机。

70,014

社区成员

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

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