请问#define NONBLANK 'a'这句语句有什么作用?
哪位大哥有空可不可以帮我把这段程序的解释写一下?谢谢,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




