CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

请问#define NONBLANK 'a'这句语句有什么作用?

楼主xvliang(xixihaha)2003-08-02 16:35:54 在 C/C++ / C语言 提问

哪位大哥有空可不可以帮我把这段程序的解释写一下?谢谢,100分相送感谢!!  
  #include   <stdio.h>  
  #define   NONBLANK   'a'      
  main()  
  {  
  int   c,lastc;  
  lastc=NONBLANK;  
  while   ((c=getchar())!=EOF){  
  if(c!='   ')  
  putchar(c);  
  else   if   (lastc!='   ')  
  putchar(c);  
  lastc=c;  
  }  
  }  
  问题点数:100、回复次数:6Top

1 楼bluei(蓝之我)回复于 2003-08-02 16:48:18 得分 5

将输入的多个连续空格简化为一个空格,并遇回车输出。  
  比如输入  
  >hello                 world!  
   
  输出为  
  >hello   world!  
  Top

2 楼bluei(蓝之我)回复于 2003-08-02 16:53:06 得分 10

功能:类echo程序,但将输入的多个连续空格简化成一个空格,遇回车输出。  
   
  如输入:  
  >hello             world!  
   
  则输出:  
  >hello   world!  
   
  你可以跟踪调试一下,程序一目了然。Top

3 楼bluei(蓝之我)回复于 2003-08-02 17:07:18 得分 80

关键在于lastc,它来源于NONBLANK。所以'a'可以改成非空格的任意一个字符。  
   
  程序开始运行,每输入一个空格导致while循环体执行一次。  
  比如最开始输入空格,(c!='   ')为假,走else,继续判断lastc!='   ',因为lastc初始化为NONBLANK,结果为真,打印c(空格),然后lastc赋值空格;  
  继续输入空格,(c!='   ')为假,走else,继续判断lastc!='   ',因为lastc刚刚赋值空格,结果为假,不打印,然后lastc赋值空格;  
  继续输入空格,情况同2,  
  ....  
  输入'b',   ,(c!='   ')为真,打印c('b'),跳过else,然后lastc赋值为c('b');  
  ....  
   
  多个空格就被过滤成一个了,非空格字符原封不动的被输出。如此而已。Top

4 楼darkhawk(黑鹰)回复于 2003-08-02 17:48:50 得分 2

程序本身很简单,没什么可说的.  
   
  倒是#define值得注意  
  #define只是一个宏定义,在c中通常用于定义一个常量,  
  或者简单的函数,有时也用于设置开关(如#ifdef),由于它只作字符串替换,没有类型检查,很不安全  
  如下边的例子  
   
  #define   PLUSPLUS(x)   x++  
  那么PLUSPLUS(x++)中x++将会被加两次  
   
   
   
  在C++中通常使用const来替代#define  
  建议参看think   in   C++Top

5 楼fierygnu(va_list)回复于 2003-08-02 18:03:46 得分 2

楼上的意思是对的,不过例子举的不好。应该用min、max一类的宏来说明问题。你的PLUSPLUS宏不会有问题的。Top

6 楼shinedreamnt(白日梦nt)回复于 2003-08-02 18:37:23 得分 1

#define   PLUSPLUS(x)   x++  
  那么y=PLUSPLUS(3*x)中  
  期望y=3x+1;  
  实际y=3(x)  
  那么y=PLUSPLUS(x*3)中  
  期望y=3x+1;  
  实际   compile   errorTop

7 楼xvliang(xixihaha)回复于 2003-08-02 19:14:25 得分 0

谢谢各位大哥,谢谢blueiTop

相关问题

  • print 语句的作用,?
  • for update of语句的作用
  • on error resume next这行语句的作用?
  • sql语句怎么不起作用?????????
  • 这些语句是什么作用的?
  • 请教该语句Application.ProcessMessages的作用?
  • try except等语句不起作用了?
  • 一个#define语句,帮忙讲讲
  • for语句中标志符的作用域问题
  • 循环中的判断语句不起作用,请帮忙

关键词

  • c++
  • 打印
  • lastc
  • 空格
  • plusplus
  • nonblank
  • 输入
  • 赋值
  • 输出
  • 程序

得分解答快速导航

  • 帖主:xvliang
  • bluei
  • bluei
  • bluei
  • darkhawk
  • fierygnu
  • shinedreamnt

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo