资源描述
用法
ile rpg例子
变量声明
1、 整数(i(整数)、b (二进制)、s(区位十进制)、p (压缩十进制))
i(整数)只可为3、5、10、20个字节长。
dposls5i 0inz(*zero)
dpos2slOi 0inz(*zero)
dpos3s3i 0inz(*zcro)
dpos4s20i 0inz(*zero)
注意
s(区位十进制)
dpos5s16s 0 inz(*zero)
2、 浮点数
只能定义为4字节和8字节
dfls4finz(*zero)
df2s8fin z(* zero)
cevalf2=121212.12121212
cf2dsply
cevalfl=121212.12121212
cfldsply
注意在小数点位数必须为blanko
8字节相当于double
4字节相当于float
dsply +1.2l21212e+05
3、 字符串
das30a inz(*blank)
a单字节或多字节
n指示符,单字节
4、 数组
这里只说明运行时数组
darrays2s 0 dim(12)
引用array(下标),下标从1开始。
dcharrs5a dim(12)
5、 基指针
基指针必须为4字节,且必须与4字节边界对齐。
6、 结构
D ParmDSDS1024
D SFldl50
D SFld2200
D
C*ENTRYPList
CParmParmDS
C*这是我们经常使用的一种结构定义方式和使用方式,这种用于传递人口参数的数据结构,一定 不能使用1NZ关键字。
Dints2s 0 inz(*zero )
Cevalcharl = '1'
Cmovelcharlint
Cintdsply
Ceval*inlr=T
Creturn
此时字符串实际长度小于数字长度,movel时,此时int显示
DSPLY 10
Dcharls1a inz(*blank)
Dints2s 0 inz(*zero )
Cevalcharl = '1'
Cmovecharlint
Cintdsply
Ceval*inlr='1'
Creturn
此时字符串实际长度小于数字长度,move时,此时int显示
DSPLY 1
Dcharls2a inz(*blank)
Dints2s 0 inz(*zero )
Cevalcharl ='12'
Cmovecharlint
Cintdsply
Ceval*inlr='1'
Creturn
此时字符串实际长度等于数字长度,movel和move时,此时int都显示
DSPLY 12
Dcharls3a inz(*blank)
Dints2s 0 inz(*zero )
Cevalcharl = '123'
Cmovelcharlint
Cintdsply
Ceval*inlr=1'
Creturn
此时字符串实际长度大于数字长度,movel时,此时int显示
DSPLY 12
move时,此时int显示
DSPLY 23
当int向char移动时也遵循这个结果.
函数比拟
一、 字符函数
das30ainz(*blank)
dbs20ainz(*blank)
des50ainz(*blank)
1、 字符串连接
C
eval
a='gaodianhua,
C
eval
b= is a good boy'
C
eval
c=a+b
CC
dsply
c*c的值dsply为
gaodianhua
is a good boy
C
eval
a=%trim(a)+%trimr(b)
c a
dsply
c*c的值dsply为
gaodianhua is a good boy
2、 扫描字符串
C
eval
pos=%scan(,oo':a:1)
C
if
pos = 0
c 'not found1
dsply
c
else
c pos
dsply
c
endif
3、%check(comparator:base{:start}):在 base 串中查找第一个不在 comparator 中存 在的字符的位置,如果base市的所看字符均在comparator中存在,那么返回0。
%checkr(comparator:base{:start}):在 base 串中查找最后一个不在 comparator 中存在的字符的位置,如果base中面所有的字符均在comprator中存在,那么返回0。 4、%SUBST (字符串:开始位置{:长度})返回自变量字符串的一局部。它也可用作带 EVAL操作码的赋值的结果5、%STR (基指针{:最大长度})(右边)
%STR (基指针:最大长度)(左边)%alloc(number)
Deallocptr1%realloc(ptr:number)
Number /、须是不带小数的非浮点数。
%STR既可以用来获取以NULL结束的字符串(当在表达式的右边使用时,此函数返 回第一个参数指向的数据,直至(但不包括)指定长度中找到的第一个空字符(xW)o 可在字符表达式有效的位置处使用此内置函数。在运行时,假设在指定的长度中找不到 NULL终止符,那么不出错。在此情况下,结果值的长度与指定的长度相同。),又可以用 来存储以NULL结束的字符串(当在表达式的左边使用时,%STR(ptr:length)将表达 式右边的值赋给指针指向的存储器,并在尾部添加以NULL结束的字节。可指定的最 大长度是65535o这表示最多可使用右边的65534字节,因为必须为末尾的NULL 终止符保存1个字节。)。
对基指针操作,务必现分配空间或赋值一个已分配空间的地址。
Dptrls
★
Dbufs
20a based(ptr2)
C
eval
ptr1=%alloc(20)
C
eval
%str(ptr1:20)=,gaodianhua,
C
eval
ptr2=%alloc(20)
C
c*与下面的结果相同
eval
buf=,gaodianhua,
c
eval
%str(ptr2:20)=,gaodianhua,
举例:
Dptrls*
Dbufs20a
Cevalptr1=%alloc(20)
Ceval%str(ptr1:20)='gaodianhua is a good boy'
Cevalbuf=%str(ptr1:20)
C* 或evalbuf=%str(ptr1)
Cbutdsply
Cdeallocptr1
Ceval*inlr='1'
Creturn
或如下例子
Dptr2s*
Dbufs30abased(ptrl)
Dbufls20a
Cevalptr2=%alloc(20)
Cevalptr1 =%alloc(%size(buf))
Cevalbuf='gaodianhua is a good boy,
Ceval%str(ptr2:20)=%str(ptr1:30)
Cevalbuf1=%str(ptr2)
C buf1dsply
Cdeallocptr2
Cdeallocptr1
Ceval*inlr='1'
Creturn
注意:
Darrs20a dim(5)
Dparrs* dim(5)
Dents3p 0
Cforcnt=1 to 5 by 1
Cevalarr(cnt)='gaodianhua'+%char(cnt)
Cendfor
Cevalparr=%addr(arr)
C*"%addr的参数是数组的名时,那么在基指针中存放的都是数组arr第一个元素C* 的地址
Cevalparr=%addr(arr(*))
(?当%2(13的参数是带下标(*)的数组名时,那么在基指针中存放的相应元素的地址
Cforcnt=1 to 5 by 1
Cevalgdh=%str(parr(cnt) :20)
C gdhdsply
Cendfor
6.%REPLACE (替换字符串:源字符串{:开始位置:要替换的源长度})
Dsrc_strs30ainz(*zero) VARYING
Drpl_strs15ainz(*zero) VARYING
Dgdhs
40a
C
eval
src_str='gaodianhua,is a good boy1
C
eval
rpl_str='liuhaitao'
C
eval
gdh=%replace(rpl_str:src_str)
C*gdh=1iuhaitao ,is a good boy,
C
eval
rpl_str=' not*
C
eval
gdh=%replace(rpl_str:gdh:%scanC,
C
src_str)+3)
C*gdh=*liuhaitao ,is notood boy,
C
eval
gdh=%replace(rpl_str:gdh:%scan(',
C
src_str)+3:4)
C*同上
C*gdh=liuhaitao ,is notood boy,
C
eval
gdh=%replace(rpl_str:gdh:%scanC,
C
src_str)+3:0)
C*gdh=liuhaitao ,is not a good boy',当第 4 个参数为 0 时,那么插入 rpl
C
eval
gdh=%replace(rpl_str:gdh:%scan(',
C
src_str)+3:8)
C*gdh=1iuhaitao ,is notboy,
C
eval
*inlr='1'
C
return
其中VARYING表示该变量长度可变,不是固定长度。
假如定义了变量buf。
Dbufs
30a inz(*zero)
C
eval
buf=,gaodianhua,
C
eval
len=%len(buf)
C*len=30
Dbufs
30a inz(*zero) varying
C
eval
buf=,gaodianhua,
C
eval
len=%len(buf)
C*len=10
Varying的效果等同于:
C
eval
len=%len(%trim(buf))
转换及日期函数str
1、%char (表达式{:格式}):可以将数字、日期、时间或时间戳记数据转换为字符型。
当表达式是日期、时间或时间戳记数据时,要将返回的字符数据转换成的日期、时间或时间戳记格式。如:%char (date:*iso)或 %char (time: *hms)
2、%int(数字表达式):%INT将数字表达式的值转换为整数。截断所有小数
%inth(数字表达式):与%山丁相同,不同点:转换为带四舍五入的整数格式3、%float(数字表达式):将数字表达式的值转换为浮点格式。
4、%xlate(from:to:string{:startpos}):# string 中的 startpos 位置开始将存在的 from 传替换为to转换后返回的值具看与string相同的类型和长度。
(1)如果在string中包含from串中的第n个字符,那么将使用to串中的第n个字符替 换。(from和to的串长度〉n)
(2)如果to串长度小于from串长度,那么to为了匹配from的长度,那么to自动使用空
格填充,并且和from中的每一位对应.
(3)如果to串长度大于from串长度,贝?from只匹配to串中from个串长度各字符。 举例:
Dfrom
s
30A
Dto
s
30A
Dbuf
s
40A
(1) from串长度=to串长度
C
eval
from='123'
C
eval
to='abc'
c
eval
buf='123456,
c
eval
buf=%xlate(from:to:buf)
Cbuf
dsply
Buf 显示为:abc456
(2) from串长度vto串长度
C
eval
from='123‘
C
eval
to='abcd"
c
eval
buf='123456,
c
eval
buf=%xlate(from:to:buf)
Cbuf
dsply
Buf 显示为:abc456
(3) from串长度>to串长度
C
eval
from='1234'
C
eval
to='abc'
c
eval
buf='123456,
c
eval
buf=%xlate(from:to:buf)
Cbuf
dsply
Buf显示为:abc56 /*4被空格替代*/
当to的定义长度大于实际赋值长度时会出现这种情况 否那么不会出现空格代替的情况.如下例:
Dfrom
s
30A
Dto
s
3A
Dbuf
s
40A
C
eval
from='1234'
C
eval
to='abc'
C
eval
buf='123456,
C
eval
buf=%xlate(from:to:buf)
Cbuf
dsply
Buf显示为:abc456 /*4未被空格替代*/ 实际上from和to之间的位数是对应的。
假如 from=,1234\to=,abc,1a
2--b3——c
4的对应情况比拟复杂,分两种情况 当机 en(to) == %len (%trim(to)) U'J-4无对应
当%len(to) > %len(%trim(to))B?f4空格
假如 from=,12,Jto=,abc,1a 2--b
To中的c有from中的谁来对应呢? 分两种情况当%len(from)==当 en (祝rim (from))时
c无对应当%len(from) > %len(%trim(from))时
c空格
Dcharl
s
10a
inz(*blank) varying
Dchar2
s
10a
inz(*blank)
Dto
s
3a
inz(*zero )
Dfrom
s
2a
inz(*zero)
Diccccccc
s10i 0 inz(*zero )evalcharl ='abcoobb'
evalfrom='12'evalto='abc'
evalcharl =%xlate(from:to:'12 2145')
charldsplyeval*inlr='1'
return此时charl显示为:abba45
当from有如下定义时Dfroms3a inz(*zero)
Charl 显示为:abcba455、和日期有关的函数 %date (expression{:date-format})}:将表达式的值由字符、数字或时间戳记数据转换成 日期型,第一个参数是要转换的值。如果不出现任何参数,那么%DATE返回当前系统 日期。对于字符或数字输入,第二个参数是日期格式。无论输入具有什么样的格式,输 出总是以*ISO格式返回。
注意:当被转换的表达式的值没有任何分隔符时,那么使用具体的date-format加”0”的方 式实现格式转换。如下:
(1).表达式没有任何分隔符
Ddatestr
s
10ainz('20060821')
Ddate
s
d
C
eval
date=%date(datestr:*isoO)
C date
dsply
(2).表达式有分隔符。Date-format假设是*ISO,那么默认为叱“
Ddatestr
s
10ainz('2006-08-21,)
Ddate
s
d
C
eval
date=%date(datestr:*iso)
C date
dsply
(3) .%date()不指定任何参数,那么返回系统日期(*ISO )
Ddate
sd
C
evaldate=%date()
C c
latedsply
Date-fromat的格式共有如下几种:
RPG名称描述格式(缺省分隔符)有效分隔符 Length 例如
*MDY
月/日/年 mm/dd/yy8 01/15/91
*DMY
日/月/年dd/mm/yy8 15/01/91
*YMD
年/月/日yy/mm/dd/・.,'&'8 91/01/15
*JUL
儒略历 yy/ddd6 91/015
*ISO
国际标准组织 yyyy-mm-dd-10 1991-01-15
*USA
旧MUSA 标准mm/dd/yyyy /10 01/15/1991
*EUR
IBM 欧洲标准 .10
*JIS
日本工业标准公元纪元 yyyy-mm-dd -10 1991-01-15
%TIME{(expression{:time-format})}:将表达式的值由字符、数字或时间戳记数据转换成
时间型
o转换后的值保持不变,但是作为时间返回。第一个参数是要转换的值。如果不
指定任何参数,那么%TIME返回当前系统时间。对于数字或字符输入,第二个参数是
时间格式。无论输入具有什么样的格式,输出总是以*ISO格式返回。
Time-format 的格式:
RPG名称描述格式(缺省分隔符)有效分隔符 Length 例如
*HMS
小时:分钟:秒 hh:mm:ss:8 14:00:00
*ISO
国际标准组织.8
*USA
旧MUSA标准。AM和PM可以是大写和小写的任意混合。 hh:mm AM or
hh:mm PM : 8 02:00 PM
*EUR
IBM 欧洲标准 hh.mm.ss .
*JIS
日本工业标准公元纪元
hh:mm:ss :8 14:00:00
%years (number) %months(number) %days(number) %hours(number) %minutes(number) %seconds(number) %mseconds(number) Ddates
d
Dtime
S
t
C
eval
date=%date()
C
date
dsply
c
eval
time=%time()
c
time
dsply
c
eval
date=date+%years(2)+%months( 13)
c c
dale
dsply
+%days(10)
c
eval
time=time+%hours(3)+%minutes(30)
c c
time
dsply
+%seconds(30)
将数字转换成可以添加到日期或时间戳记值的持续时间。左边的值必须是日期或时间戳 记。结果是加上或减去了适当年数的日期或时间戳记值.
注意:日期经过加减运算后具有不可逆性如Date=2006-08-31
Eval date=date+%months(1 )-%months(1)现在date的值是:2006-08-30
%SUBDT(value:*MSECONDS|*SECONDS|*MINUTES|*HOURS|*DAYS|*MONTHS|*
YEARS)
%SUBDT(value:*MS|*S|*MN|*H|*D|*M|*Y)
%subdt:抽取日期、
时间或时间戳记的一局部,并返回。
第一个参数是日期、
时间或时间戳记值。
第二个参数是要抽取的局部。
对于日期:*DAYS、
*MONTHS 和 *YEARS
对于时间:*SECONDS. *MINUTES 和 *HOURS
对于时间戳记:*MSECONDS、"SECONDS、*MINUTES、*HOURS、*DAYS、*MONTHS
和 *YEARS
对于此函数,*DAYS
总是指一个月中的天而不是一年中的天(即使使用儒略日期格式
亦如此)。例如,2月
10日的天局部是10而不是41。此函数总是返回4位的年份,
即使日期格式使用2
:位的年份亦如此。
如:
Ddate
sd inz(D,2006-8-21,)
Dtime
st inz(T'22.58.32')
Dnum
s8p 0
C
eval num=%subdt(date:*years)
C*num=2006
C
evalnum=%subdt(date:*days)
C*num=21
C
eval num=%subdt(time:*hours)
C*num=22
C
eval num=%subdt(time:*minutes)
C*num=58
SUBDUR操作可用来:
减去持续时间以建立新的“日期”、“时间”或“时间戳记”
计算持续时间
Subdur操作码的用法:
Ddate 1
sd inz(D'2006-08-21,)
Ddate2
sd
Dyy
s2p0 inz(2)
Dmm
s2p0 inz(2)
Ddd
s2p 0 inz(10)
C datel
dsply
C datel
subdur yy:*ydate2
C datel
subdur mm:*mdate2
C datel
subdur dd:*ddate2
C date2
dsply
C*date2=D,2006-08-11,
C
datel
subdur
yy:*y
date2
C
subdur
mm:*m
date2
C
subdur
dd:*d
date2
C*date2=D,2004-06-11',在 subdur 的因子 1(date1 出现了 3 次还是 1 次)C*要注意两次date2值得区别
C*等价于adddur的用法
C
datel
adddur
-2:*y
date2
C
adddur
-2:*m
date2
C
adddur
-10:*d
date2
C*
C
datel
subdur
-2:*y
date2
C
subdur
-1:*m
date2
C
subdur
-10:*d
date2
C*date2=D'2008-10-0T/*9 月份只有 30 天
*/
C*等价于adddur的用法
C
datel
adddur
2:*y
date2
C
adddur
1:*m
date2
c
adddur
10:*d
date2
C*date2= D'2008-10-01'/*9 月份只有 30 天
*/
C
date2
subdur
datel
num:*y
C*num=2
C
date2
subdur
datel
num:*m
C*num=25 t
“date2-date1 差 20 天满 26 个月*/
C*等价于%diff函数用法如下:
C
eval
num=%diff(date2:date1 :*m)
c
eval
*inlr='1'
c
return
%DIFF (两个日期、时间或时间戳记值之间的差)%DIFF(op1:op2:*MSECONDS|*SECONDS|*MINUTES|*HOURS|*DAYS|*MONTHS|*
YEARS)%DIFF(op1:op2:*MS|*S|*MN|*H|*D|*M|*Y)
TEST操作允许在使用前测试日期、时间或时间戳记字段的有效性。
Test的用法:
因子1
操作码
结果字段
指不符
Test(E)
日期/时间或时间戳记字段
-ER-
日期格式
Test(DE)
字符或数字字段
-ER-
时间格式
Test(TE)
字符或数字字段
-ER-
时间戳记格式
Test(ZE)
字符或数字字段
-ER-
具体的日期格式、时间格式、时间戳记格式在上面都做了相应的注释。
对于测试操作,必须指定操作码扩充符“E”或错误指示符ER,但不能同时指定。
一般情况下操作码带扩展符E时,那么应和%ERROR配合使用。
如果结果字段变量已声明为“日期”、“时间”或“时间戳记”的字段,那么不能指定 dtz^format (因子1)的操作数,并且不允许操作码扩充符“口”、T 和 2 精度转换函数%DEC(numeric expression{:precision:decimal places})
%DEC将数字表达式的值转换为带精度位和小数位的十进制(压缩)格式,假设省略这 些参数,那么从数字表达式的属性中获取精度和小数位。
%DECH (数字表达式:精度:小数位)%DECH将进行四舍五入,所有三个参数都是必需的。
%DECPOS (数字表达式)%DECPOS返回数字变量或表达式的小数位数。返回的值是常数,因此可参与常数合 并。数字表达式一定不能是浮点变量或表达式。
Dp7
s
7p 3 inz (1234.567)
Ds9
s
9s 5 inz (73.73442)
Df8
s
8f inz (123.456789)
D resultl
s
15p5
D result2
s
15p 5
D results
s
15p5
D result4
s
5i0
C
eval
resultl =%dec(p7)+0.011
C*Mresult1" is now
1234.57800
C
eval
result2=%dec (s9 : 5: 0)
C*Mresult2" is now
73.00000
C
eval
result3=%dech (f8: 5: 2)
C"result3" is now
123.46000
C
eval
result4=%decpos(p7)
Cwresult4M is now
3
%len 和%5126%len(表达式):可用来取得变量表达式的长度,或设置变长字段的当前长度
%len在右边时:在表达式的右边使用时,这个函数返回变量表达式的位数或字符数。
对于数字表达式来说,返回的值表示表达式的精度而不一定是有效数字的实际位数。对于浮点变量或表 达式,返回的值是4或8。当参娄是数字文字时,返回的长度是文字的位数。
对于字符、图形或UCS-2表达式,返回的值是表达式值中的字符数。对于可变长度值(如从内置函数返 回的值或变长字段),%LEN返回的值是字符、图形或UCS-2值的当前长度。
%len在左边时:这个函数设置变长字段的当前长度。如果设置长度比当前长度长,那么将字段中 旧长度和新长度之间的字符设置为空格。
Dien
S
3i0
Dint
S
10i0
DcharlO
S
10 varying inz('abcde')
Dch10
S
10 inz('abcde')
D
C
eval
len=%len(int)
C*len=10(字符数或位数)
C
eval
len=%size(int)
C*len=4(占用字节数)
C*对于使用了 VARYING关键字和不使用的区别
C
eval
len=%len(char10)
C*但是,如果该结构不是作为程序入口参数或是作为下级调用的接口参数,一般要在工程中约定 使用INZ关键字。INZ关键字会让系统在程序被激活时,自动按结
C*构各子字段的类型自动初始化, 数字零。
Dmystruds
D name
D age
D memo
D
addr
1
D
tell
21
D
te12
33
或
Dmystru
ds
D name
D age D memo D addr
D tell D te!2 或 Dmystru
ds
D name
D age
D memo
D addr
D tell
D tel2
D other
多重数据结构及使用
Dmystruds
D name
D age
D memo
D addr
D tell
D te12
D other
Dents
C*给第一个mystru赋值
否那么上述结构中SFIdl字段的值将是一个非法的空格值而不是
20a3s 0
44a
20a
32a
42a
68
20a
3s 0
44a
20a overlay(memo: I)
12a overlay(memo:21)
12a overlay(memo:33)20a
3s 0
44a
20a overlay (memo)
12a overlay (memo: *next)
12a overlayCmemo^next)
12aoccurs(lO) inz
20a
3s 0
44a
20aoverlay (memo)
12aovcrlay(mcmo: *ncxt)
12aoverlay(memo: *next)
12a
2s 0 inz(*zero)
C1
occur
mystru
C
eval
name='高殿华'
c
eval
age=3()
c
eval
addr='河北省吴桥县’
c
eval
C*len=5
Cevalien=%size(char10)
C*len=12(应该加上2)
Cevallen=%len(ch10)
C*len=10(虽然进行了初始化,但是他有空格填充)
Cevallen=%size(int)
C*len=10(占用字节数)
%SIZE (变量)
%SIZE (文字)
%SIZE (数组{:*ALL})
%S1ZE (表{:*ALL})
%SIZE (屡次出现数据结构{:*ALL})
%SIZE返回常数或字段占用的字节数。自变最可以是文字、命名常量、数据结构、数据结构子字 段、字段、数组或表名。它不能包含表达式,但可以接受一些具有常数值的内置函数和常量表达式。 返回的值是无符号整数格式(类型U)o对于图形文字来说,大小是图形字符占用的字节数。对于 十六进制或UCS-2文字,返回的大小是文字中十六进制位数的一半。对于变长字段来说,%SIZE返 回字段占用的总字节数(比声明最大长度长两个字节)。假设自变量是数组名、表名或屡次出现数据 结构名,那么返回的值是一个元素或值的大小。假设将*ALL指定为%SIZE的第二个参数,那么返回的 值是所有元素或值占用的存储器。对于包含指针子字段的屡次出现数据结构来说,该大小可能大于 一个值乘以值数的大小。这是可能的,因为系统要求将指针放在地址为16的偶数倍的存储器中。 这表示可能必须增长各值的长度以使其足以是16的精确倍数,以便在存储器中正确定位各值的指 针子字段。
数据库文件 操作
1、 read
代码 因子1因子2 结果字段指示符
READ (E N)文件名 data-structure _ ER EOF
READ (E N)记录名_ ER EOF
附录资料:不需要的可以自行删除
Abstract: Based on the comprehensive analysis on the plastic part's structure service requirement, mounding quality and mould menu factoring cost. A corresponding injection mould of internal side core pulling was designed. By adopting the multi-direction and multi-combination core-pulling. A corresponding injection mould of internal side core pulling was designed, the working process of the mould was introduced C语言详解-枚举类型注:以下全部代码的执行环境为VC++60
在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可 能是:
#define MON 1#define TUE 2
#define WED 3#define THU 4
#define FRI 5#dcfinc SAT 6
#define SUN 7在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。
1 .定义一种新的数据类型-枚举型
以下代码定义了这种新的数据类型-枚举型enum DAY {
MON=1,TUE, WED, THU, FRI, SAT, SUN};
(1)枚举型是一个集合,集合中的元索(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
2 2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3)第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4)可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5)枚举型是预处理指令#define的替代。
(6)类型定义以分号;结束。
3 .使用枚举类型对变量进行声明新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型im,单精度浮点型floai, 双精度浮点型double,字符型char,短整型short等等。用这些基本数据类型声明变量通常是这样:
chara; //变量a的类型均为字符型charcharletter;
intx,y,
z; //变量x,y和z的类型均为整型intint number;
double m, n;double result; //变量result的类型为双精度浮点型double
既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。
方法•:枚举类型的定义和变量的声明分开enum DAY
MON=1,TUE, WED, THU, FRI, SAT, SUN cnum DAY yesterday;enum DAY today;
enum DAY tomorrow; 〃变量 tomorrow 的类型为枚举型 enum DAYenum DAY good_day, bad_day; 〃变量 good_day 和 bad_day 的类型均为枚举型 enum DAY 方法二:类型定义与变量声明同时进行:
enum 〃跟第一个定义不同的是,此处的标号DAY省略,这是允许的。 (
Saturday, sunday = 0, monday, tuesday, Wednesday, thursday, friday} workday; 〃变量workday的类型为枚举型enum DAY
展开阅读全文