| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1251 人关注过本帖
标题:为什么words=1,lines=0, partial lines=1.一直是这个答案?
只看楼主 加入收藏
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
结帖率:90.63%
收藏
已结贴  问题点数:10 回复次数:6 
为什么words=1,lines=0, partial lines=1.一直是这个答案?
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#define STOP '|'
int main(void)
{
    char c;
    char prev;
    long n_chars = 0L;
    int n_lines = 0;
    int n_words = 0;
    int p_lines = 0;
    bool inword = false;
    printf("Enter text to be ananlyzed(| 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, n_lines);
    printf("partial lines = %d\n", p_lines);
    return 0;
}
2016-04-05 23:37
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
之前的说法是错的,最新的研究发布在下方


[此贴子已经被作者于2016-4-6 19:33编辑过]


φ(゜▽゜*)♪
2016-04-06 00:40
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
0.0|||


[此贴子已经被作者于2016-4-6 19:31编辑过]


φ(゜▽゜*)♪
2016-04-06 00:46
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
我是按着书上打的,检查过一遍了,应该没打错,难道是编译器问题吗?我用的是VS2013
2016-04-06 18:51
zhangheyan19
Rank: 2
等 级:论坛游民
帖 子:16
专家分:16
注 册:2016-4-5
收藏
得分:5 
回复 4楼 _Strike
不要太相信书 书上很多都是老古董的代码
2016-04-06 18:54
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:5 
回复 4楼 _Strike
编译器绝对没有问题!
我用的是Dev C++,和你一样出问题。



[此贴子已经被作者于2016-4-6 19:31编辑过]


φ(゜▽゜*)♪
2016-04-06 19:04
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 4楼 _Strike
程序代码:
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<stdbool.h>
#define STOP '|'
int main(void)
{
    char c;
    char prev;
    long n_chars = 0L;
    int n_lines = 0;
    int n_words = 0;
    int p_lines = 0;
    bool inword = false;
    printf("Enter text to be ananlyzed(| to terminate;\n");
    prev = '\n';
    while ((c = getchar() )!= STOP)//你原先的程序这里的while循环括号写错位置了!导致整体循环出了问题

    {
        n_chars++;
//        printf("[%c]",c);
            if (c == '\n'){
              


                n_lines++;
//                printf("{lines%d}",n_lines);
            }
//        printf("[%d]",isspace(c));//导致不管输入的是什么字符这里恒为零的原因就是上面那个循环条件写错了。
        if ( !isspace(c) &&  !inword)
        {
            inword = true;
                n_words++;
//                printf("[%d]",n_words);
        }
        if (isspace(c) && inword)
            inword = false;
        prev = c;
   }
    if (prev != '\n')        //同时收回我之前的话,这个if语句是用来判断程序读入“|”之前读到的那个字符是不是回车。效果就如上图
        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;
} 
图片附件: 游客没有浏览图片的权限,请 登录注册

另外我刚刚百度了一下,ISSPACE 的用法确实是判定字符是不是空格,具体的情访问链接:
http://www.


φ(゜▽゜*)♪
2016-04-06 19:30
快速回复:为什么words=1,lines=0, partial lines=1.一直是这个答案?
数据加载中...
 
   



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

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