| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 702 人关注过本帖
标题:求助啊 卡壳了 不懂为什么
只看楼主 加入收藏
a132266
Rank: 2
等 级:论坛游民
帖 子:86
专家分:20
注 册:2015-3-26
结帖率:66.67%
收藏
已结贴  问题点数:18 回复次数:10 
求助啊 卡壳了 不懂为什么
/*            用于统计 键入字符的  字符数 单词数 行数                                                      */
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#define STOP '|'
int main(void)
{
    char c;                                //读入字符
    char prev;                            //当前读入一个字符
    long n_chars = 0;                    //字符数
    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)        // isspace函数可以判断 空格 换行 之类的字符  
        {  
            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,n_lines);
            printf("partial lines=%d\n",p_lines);
            
            return 0;
}
/*        那个统计单词的 我分析的不太靠谱
搜索更多相关主题的帖子: include 单词 统计 
2015-05-27 23:13
a132266
Rank: 2
等 级:论坛游民
帖 子:86
专家分:20
注 册:2015-3-26
收藏
得分:0 
if(!isspace(c) && !inword)    这个if 语句里面的表达式 非isspace(c)我明白。但是后面那个 非inword 也就是非假 这个是怎么判断的 怎么跑出来的啊
2015-05-27 23:14
a132266
Rank: 2
等 级:论坛游民
帖 子:86
专家分:20
注 册:2015-3-26
收藏
得分:0 
2015-05-28 07:46
a132266
Rank: 2
等 级:论坛游民
帖 子:86
专家分:20
注 册:2015-3-26
收藏
得分:0 
有人能解释下 if(!isspace(c) && !inword) 这行代码吗
2015-05-28 10:33
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:9 
以下是引用a132266在2015-5-28 10:33:39的发言:

有人能解释下 if(!isspace(c) && !inword) 这行代码吗



如果字符不是空格且处在单词中

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2015-05-28 11:28
a132266
Rank: 2
等 级:论坛游民
帖 子:86
专家分:20
注 册:2015-3-26
收藏
得分:0 
回复 5楼 do8do8do8
这个是怎么判断 的不是空格 不在字符中
2015-05-28 11:36
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:9 
if(!isspace(c) && !inword)
    !isspace(c)的作用当前字符为非空白字符
    !inword当前字符的前一个字符是空白字符
    此时一个的单词开始 inword的状态为真

if(isspace(c) && inword)
    isspace(c)的作用当前字符是空白字符
    inword当前字符的前一个字符是非空白字符
    此时说明当前单词结束 inword的状态为假

两个if()相互作用,不可能连续执行。只有一个if()执行完后才能改变条件inword的值满足另一个if()。

人有多懒,编程就有多难。
2015-05-28 12:38
a132266
Rank: 2
等 级:论坛游民
帖 子:86
专家分:20
注 册:2015-3-26
收藏
得分:0 
回复 7楼 TAAAAB
!inword当前字符的前一个字符是空白字符    inword前面声明为布尔类型 假,   这个靠什么判断的前一个字符是空白字符  为假或者为真 就是空白字符吗?
2015-05-28 13:13
a132266
Rank: 2
等 级:论坛游民
帖 子:86
专家分:20
注 册:2015-3-26
收藏
得分:0 
回复 7楼 TAAAAB
if(!isspace(c) && !inword)
    !isspace(c)的作用当前字符为非空白字符
    !inword当前字符的前一个字符是空白字符
    此时一个新的单词开始 inword的状态为真

if(isspace(c) && inword)
    isspace(c)的作用当前字符是空白字符
    inword当前字符的前一个字符是非空白字符
    此时说明当前单词结束 inword的状态为假

两个if()相互作用,不可能连续执行。只有一个if()执行完后才能改变条件inword的值满足另一个if()。

if判断是不是 isspace第一个表达式成立 接着inword 为真 的时候才执行语句块
2015-05-28 13:19
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
回复 8楼 a132266
以下是引用a132266在2015-5-28 13:13:55的发言:

!inword当前字符的前一个字符是空白字符    inword前面声明为布尔类型 假,   这个靠什么判断的前一个字符是空白字符  为假或者为真 就是空白字符吗?


当然是靠inword判断啊, inword前面声明为布尔类型假,!inword不就为真了吗

人有多懒,编程就有多难。
2015-05-28 13:40
快速回复:求助啊 卡壳了 不懂为什么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015679 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved