| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2596 人关注过本帖
标题:有道程序分析不来,请指点迷津~
只看楼主 加入收藏
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:0 
程序代码:
#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 19:09
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:0 
程序代码:
#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的值还是空格,就不输出,而再把值赋给lastc */
        lastc = c;     }
}
/* EOF,End Of File,实际上 EOF 的值通常为 -1,但它依系统有所不同。它实际上是个宏定义,你在头文件stdio.h中可以看到它的声明,windows中一般用ctrl+z代表结束码*/

有好书慢慢看,务求理解

想象力征服世界
2009-11-12 19:11
小楼ai
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-11-11
收藏
得分:0 
我按照那个意思,自己写了个:
#include<stdio.h>
void main()
{
    int a,lasta=1;
    while((a=getchar())!=EOF)
    {
        if(a!='')putchar(a);
        if(a=='')
            if(lasta!='')putchar() ;
        lasta=a;
        getchar();
    }
}
但是不仅不能够正确得出结果,而且win-tc告诉我,文件不能够保存,
大家也帮我看看吧
2009-11-12 19:15
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:0 
回复 11楼 xiefeng122
程序代码:
#include <stdio.h>

#define NONBLANK 'a'

main()
{
    int c, lastc;
    
    lastc = NONBLANK;
    while((c = getchar()) != EOF)//在这里输入‘f’并且回车,所以又两个字符,所以又两次循环,第一次循环,输出'f',第二次输出'回车'
    {
        if(c != ' ')
            putchar(c);
        if(c == ' ')
            if(lastc != ' ')
                putchar(c);
        lastc = c;
    }
}
不好意思,刚点错了···
这个程序其实是对字符输入输出的理解吧···
c=getcher();这个程序其实包含了2个字符的处理
还有EOF在windows平台是ctrl+z
2009-11-12 19:15
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:0 
程序代码:
/* 13L:建议你模仿一下优秀的代码风格,按书上的来,最好格式化,便于别人改错,也便于你自己以后查看 */

#include<stdio.h>
void main()
{
    int a,lasta=1;
    while((a=getchar())!=EOF)
    {
        if(a!=' ')
           putchar(a);
        if(a==' ')
            if(lasta!=' ')
              putchar(a) ;
        lasta=a;
       
    }
 getchar();/* 看看你漏了什么,我帮你改好了 */
    }


想象力征服世界
2009-11-12 19:35
小楼ai
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-11-11
收藏
得分:0 
回复 15楼 longlong89
恩,谢谢你的建议,可是我想知道那种风格算是优良的呢,由于我是初学者,所以有些不懂。我在 中敲入Ctrl+Z。结果它直接就结束了
,这个是什么原因呢?另外我找到了不能将连续的空格变为一个的原因,是因为我将空格字符打错了,应该是‘(中间有一个空格)’,而我没有打那个空格。真是粗心啊。还想请教一下,为什么说我的源文件无法保存呢?
2009-11-12 20:08
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
如果只是为了把一个字符串中的字符输出,并且把其中两个空格变成一个空格输出的话,那可以用数组来存储这个字符啊再用调用函数来实现啊。我对LZ给出的这个程序理解不来。因为我看的是学校里面的C入门书,还没有看过那样的例子。
LZ要是理解出来的话还请拿出来让我学习一下吧。
2009-11-12 21:04
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
回复 12楼 longlong89
#include <stdio.h>

#define NONBLANK 'a'

main()
{
    int c, lastc;    /*究竟这个last定义的是什么东西?是一个变量还是什么?*/
   
    lastc = NONBLANK;      /* 这里我理解不来?应该是宏定义了NONBLANK是为'a'啊?那last这里不是就是被赋值了么?*/
    while((c = getchar()) != EOF)    {
        if(c != ' ')   /* 如果该字符不是空格就输出 */
            putchar(c);
        if(c == ' ')
            if(lastc != ' ')    /*那么这个IF语句就是判断的last不等空格?*/
                putchar(c);/* 如果当前是空格就输出,并把当前值赋给lastc,下次如果c的值还是空格,就不输出,而再把值赋给lastc */
        lastc = c;     }  /*对于这里的理解应该是把空格赋给last啊?然后才能在下次循环的时候判断(lastc != ' ')的情况下再执行输出语句 putchar(c);不是么?*/
}
/* EOF,End Of File,实际上 EOF 的值通常为 -1,但它依系统有所不同。它实际上是个宏定义,你在头文件stdio.h中可以看到它的声明,windows中一般用ctrl+z代表结束码*/
你对这个程序理解的话,帮忙把我的疑问解答一下,我实在理解不了也。谢谢。。
2009-11-12 21:17
fuqingjun
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:48
专家分:80
注 册:2009-11-2
收藏
得分:0 
#include <stdio.h>          文件包含

#define NONBLANK 'a'                         宏定义   NOBLANK   为 字符 ‘a’         


main()                                       主函数

{

    int c, lastc;                            变量申请  整型的  c,和 lastc
   
    lastc = NONBLANK;                       给lastc 赋初值 'a'   注意这个a是随便的,目的是在让用户输入第一个字符之前不能让lastc为空格所以叫NOBLANK

    while((c = getchar()) != EOF)           用于用户输入的循环开始  判断条件为 若用户输入不是EOF则变量 c = 用户输入的字符,

    {

        if(c != ' ')                        若c不为空格

            putchar(c);                         则打印c

        if(c == ' ')                        若c为空格

            if(lastc != ' ')                    当上一个字符不是空格               

                putchar(c);                     打印c

        lastc = c;                          把这次输入存入上次标记:lastc
    }
}
最后我说一句, ASCII码 的数字和字符时对应的,putchar()函数的参数如果是数字 那么这个函数的返回值就是 这个数字所对应的 ASCII 字符。 不用惊奇为什么字符变量用整型申请, 仅仅是个符号。祝你学业有成。我们共同努力。

我是猪猪,我很想进步,寻志同道合者革命途中并肩行路!
2009-11-12 22:31
fuqingjun
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:48
专家分:80
注 册:2009-11-2
收藏
得分:0 
这个程序用作输入时将用户输入复制到输出流,并将用户连续输入的空格过滤为一个

我是猪猪,我很想进步,寻志同道合者革命途中并肩行路!
2009-11-12 22:34
快速回复:有道程序分析不来,请指点迷津~
数据加载中...
 
   



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

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