| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2596 人关注过本帖
标题:有道程序分析不来,请指点迷津~
取消只看楼主 加入收藏
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
结帖率:88.24%
收藏
 问题点数:0 回复次数:8 
有道程序分析不来,请指点迷津~
将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。

#include <stdio.h>

#define NONBLANK 'a'

main()
{
    int c, lastc;
   
    lastc = NONBLANK;
    while((c = getchar()) != EOF)
    {
        if(c != ' ')
            putchar(c);
        if(c == ' ')
            if(lastc != ' ')
                putchar(c);
        lastc = c;
    }
}

练习题上的这道题分析了不清楚,小弟是刚入学,请各位达人讲解一下~~
搜索更多相关主题的帖子: 程序分析 
2009-11-12 14:30
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
没人帮我分析分析吗?自己先顶一下!
2009-11-12 15:23
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
我也不知道呀,看不懂啊!
2009-11-12 15:33
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
晕,这我知道,这程序我看不懂!
2009-11-12 16:01
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
为什么要用int来声明变量,经典书the c programming language 新版10页上是这么说的。

在没有输入时,getchar函数将返回一个特殊值,这个特殊值与任何实际字符都不同。这个值称为EOF。我们在声明变量C的时候,必须让它大到足以存放getchar函数返回的任何值。这里之所以不把C声明成char类型,是因为它必须足够大,除了能存储任何可能的字符外还要能存储文件结束符EOF。因此,我们将C声明成int类型。

小弟我也搞不懂它说的“足够大”是什么意思?

这个程序是这本书的练习题,
小弟做不来,就翻了此本书附带的练习解答手册,手册上是这么写的。

我百思不得其解啊,请各位高手帮帮忙啊!
2009-11-12 17:17
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
楼上几位大哥说的我还不是很明白,我还没搞懂!

#include <stdio.h>

#define NONBLANK 'a'      /*这个定义在这个程序中到底起了什么关键性作用?*/

main()
{
    int c, lastc;
    lastc = NONBLANK;       /*为什么要让这个常量赋值给这个变量?*/
   
    while((c = getchar()) != EOF)       /*如果输入的字符中不含有EOF,就执行循环体,这我明白*/
        if(c != ' ')       /*这句我搞不懂,执行循环体后,   如果(c 不等于 空格)就执行下一句?*/
            putchar(c);    /*那如果我输入的字符里带有空格呢?那这个程序就不运行了?*/
}

光上面的程序我运行后,效果是这样的,当我无论输入多少空格,它都无视我的空格,不让我打印空格!

继续下面的,恕小弟愚昧,实在看不懂各位大哥注解!完全读不通!

        if(c == ' ')   /*如果(C 等于 空格),就执行下面的如果,是这个意思吗?*/
            if(lastc != ' ')    /*如果(lastc 不等于 空格)就执行putchar(c),我觉得奇怪,lastc不会有空格啊,因为上面已经说明了lastc = NONBLANK = 'a'吗?我只看见个A,那里来的空格啊?不解*/
                putchar(c);   /*这个程序怎么会有2个putchar(c)?*/
        lastc = c;    /*  C变量存储的字符赋值给变量lastc?,lastc = NONBLANK,lastc = c,到底等于什么啊?*/

我写了复杂了点,不知各位理解我的意思否?小弟实在愚昧,请各位详细明了的带我走出困境!谢谢!
2009-11-13 15:58
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
为什么我把#define NONBLANK 'a'    lastc = NONBLANK 这句删掉,程序还能正常运行?结果还是一样?

这两句根本不重要?
2009-11-30 15:45
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
谁是不懂呀~~耐心等待详细讲解!!
2009-12-01 15:39
michaelyj
Rank: 1
来 自:上海
等 级:新手上路
帖 子:55
专家分:0
注 册:2009-10-27
收藏
得分:0 
大致上好像明白点了,当输入了许多字符后回车,程序是不是一个字符一个字符的处理?一个字符循环判断一次?
2009-12-01 16:20
快速回复:有道程序分析不来,请指点迷津~
数据加载中...
 
   



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

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