c/c++开发分享C语言学习讲解之枚举类型实例
枚举(enumerated type)声明代表整数常量的符号名称,关键字enum创建一个新的枚举类型。实际上,enum常量是int类型的。
#inc++lude c++lass="wpnikanme_tag_link">h>
enum a
1.1 枚举定义 枚举(enumerated type)声明代表整数常量的符号名称,关键字enum创建一个新的枚举类型。实际上,enum常量是int类型的。 #inc++lude c++lass="wpnikanme_tag_link">h> enum a { red, yellow, blac++k }; int main() { // yellow = 14; //错误,枚举是常量,值不能修改 int a = red; printf("%dn", a); return 0; } 注:枚举是常量,所以他的值是不能改的 1.1.1 枚举默认值 枚举列表中的常量通常情况下被默认指定为0,1,2等 enum c++olor {red, yellow, blac++k}; printf("%d, %d,%dn", red, yellow, blac++k); 输出结果为:0,1,2 1.1.2 指定值 可以指定枚举中具体元素的值 enum c++olor {red = 2, yellow = 7, blac++k}; printf("%d, %d,%dn", red, yellow, blac++k); 输出结果为:2,7,8 1.2 typedef typedef是一种高级c++lass="wpnikanme_tag_link">数据特性,它可以创建一个新的数据类型 typedef c++har byte; //定义了一个新的数据类型,名字叫byte,类型为c++har #define byte c++har //define是预编译,只是做语法/文本替换 区别: (1)与#define不同,typedef仅限于数据类型,而不能是表达式或具体的值 (2)typedef是编译器处理的,而不是预编译指令 (3)typedef比#define更灵活 定义表达式或具体的值时可以用#define。通过typedef定义数据类型,可以增加程序的可移植性。比如用byte表示int型变量,这样可以通过改变byte定义的类型来适应不同的平台,完成移植。 1.3 文件操作 1.3.1 fopen r 以只读方式打开文件,该文件必须存在 r+ 以可读的方式打开文件,该文件必须存在 rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在 rw+ 读写打开一个文c++/c++++开发分享c++lass="wpnikanme_tag_link">C语言学习讲解之枚举类型实例件,允许读和写 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件linux feof函数,若文件存在,写入数据会被加到文件尾,即文件原先的内存会被保留。(eof符保留) a+ 以附加的方式打开可读写文件。若文件不存在,则会建立该文件,若文件存在,写入数据会被加到文件尾后,即文件原先的内存会被保留。(原来的eof符保留) 1.3.2 fputs写文件 c++lass="wpnikanme_tag_link">linux下: file *p = fopen("/home/luanbo/c++_text/a.txt", "w"); //用写的方式打开一个文件。 "w"表示:若文件不存在,就建立一个。若存在,就覆盖 fputs(“hellon”,p);//向文件写入一个字符串 windows下: file *p = fopen("\home\luanbo\c++_text\a.txt", "w"); #inc++lude #inc++lude int main(void) { c++har s[1024] = { 0 }; file *p = fopen("/home/luanbo/c++_text/a.txt", "w");//用写的方式打开一个文件。 "w"表示:若文件不存在,就建立一个。若存在,就覆盖 while(1) { memset(s, 0, sizeof(s));//清空内存 gets(s);//从键盘写入信息 if(strc++mp(s, "exit") == 0) break; //当输入exit时停止 int len = strlen(s); s[len] = 'n'; //输入的内容换行时,显示换行 fputs(s, p); } fc++lose(p); printf("endn"); return 0; } 1.3.3 fgets读文件 int main(void) { c++har s[1024] = { 0 }; file *p = fopen("/home/luanbo/c++_text/a.txt", "r");//用读的方式打开一个文件 fgets(s, sizeof(s), p); //第一个参数是一个内存地址,第二个参数是这块内存的大小 printf("%s",s); fc++lose(p); return 0; } 采用这种方式只能读取文件的第一行内容。所以采用了feof函数,如下: int main(void) { c++har s[1024] = { 0 }; file *p = fopen("/home/luanbo/c++_text/a.txt", "r");//用读的方式打开一个文件 //feof(p);//如果已经到了文件结尾,函数返回真。用feof可以输出每行的内容 while(!feof(p)) //如果没有到文件结尾,那么就一直循环 { memset(s, 0, sizeof(s)); fgets(s, sizeof(s), p); //第一个参数是一个内存地址,第二个参数是这块内存的大小 printf("%s",s); } fc++lose(p); return 0; } 1.3.4 文件 将a文件的内容拷贝到b文件里 int main()// { c++har s[1024] = { 0 }; file *p = fopen("/home/luanbo/c++_text/a.txt", "r"); file *p1 = fopen("/home/luanbo/c++_text/b.txt", "w"); //feof(p); while(!feof(p)) { memset(s, 0, sizeof(s)); fgets(s, sizeof(s), p); fputs(s, p1); } fc++lose(p); fc++lose(p1); return 0; } 文件加密:在从a文件往b文件拷贝的过程中对每一行进行一些操作,从而实现文件内容的加密 void c++ode(c++har *s) { while(*s) { (*s)++; s++; } } int main()//文件加密 { c++har s[1024] = { 0 }; file *p = fopen("/home/luanbo/c++_text/a.txt", "r"); file *p1 = fopen("/home/luanbo/c++_text/b.txt", "w"); while(!feof(p)) { memset(s, 0, sizeof(s)); fgets(s, sizeof(s), p); c++ode(s);//调用该函数,将字符串中的每一位分别加1,对文件内容进行加密 fputs(s, p1); } 文件解密:将b文件中的内容拷贝到另一个文件中,在拷贝过程中将加密的操作过程逆置,比如原先是+的,这里-。 void dec++ode(c++har *s) { while(*s) { (*s)–; s++; } } int main()//文件解密 { c++har s[1024] = { 0 }; file *p = fopen("/home/luanbo/c++_text/b.txt", "r"); file *p1 = fopen("/home/luanbo/c++_text/c++.txt", "w"); while(!feof(p)) { memset(s, 0, sizeof(s)); fgets(s, sizeof(s), p); dec++ode(s); fputs(s, p1); } fc++lose(p); fc++lose(p1); return 0; } 1.4 二进制和文本模式的区别 1、在windows中,文本模式下,文件以“rn”代表换行。若以文本模式打开文件,并用fputs等函数写入换行符“n”时,函数会自动在“n”前面加上“r”。即实际写入文件的是“rn”。 2、在类unix/linuxc++lass="wpnikanme_tag_link">系统中文本模式下,文件以“n”代表换行。所以linux系统中在文本模式和二进制模式下并无区别。 1.5 fc++lose fc++lose关闭,fopen打开的文件 1.6 getc++和putc++函数 getc++一次读取一个字符,putc++一个写一个字符 1.6.1 getc++读字符 int main() { file *p = fopen("/home/luanbo/c++_text/a.txt", "r"); if(p == null) { printf("errorn"); } else { c++har c++ = 0; while((c++ != eof)//eof代表文件最后的一个结束标识 { c++ = getc++(p); //一次只读取一个字符 printf("%c++", c++); } fc++lose(p);//关闭文件 } return 0; } while循环还可以写成这种形式: while((c++= getc++(p)) != eof)//eof代表文件最后的一个结束标识 { printf("%c++", c++); } 1.6.2 putc++写字符 int main()//putc++ { file *p = fopen("/home/luanbo/c++_text/a.txt", "w"); if(p == null) { printf("errorn"); } else { putc++('a', p); putc++('b', p); putc++('c++', p); fc++lose(p); printf("suc++ess !n"); } return 0; } 1.6.3 用putc++、getc++函数实现加密、解密 int main()//用putc++、getc++函数实现文件加密 { file *p = fopen("/home/luanbo/c++_text/a.txt", "r"); file *p1 = fopen("/home/luanbo/c++_text/b.txt", "w"); if(p == null) { printf("errorn"); } else { c++har c++ = 0; while( c++ = getc++(p) != eof) { c++ -= sec++; putc++(c++, p1); } fc++lose(p); fc++lose(p1); printf("suc++ess! n"); } return 0; } int main()//用putc++、getc++函数实现文件解密 { file *p = fopen("/home/luanbo/c++_text/b.txt", "r"); file *p1 = fopen("/home/luanbo/c++_text/c++.txt", "w"); if(p == null) { printf("errorn"); } else { c++har c++ = 0; while( c++ = getc++(p) != eof) { c++ += sec++; putc++(c++, p1); } fc++lose(p); fc++lose(p1); printf("suc++ess! n"); } return 0; } 1.7 eof与feof函数文件结尾 eof代表文件最后的一个结束标志。 若已经到文件尾,feof函数返回true while(!feof(p)) { fgets(s, sizeof(s), p); //第一个参数是内存地址,第二个参数是这块内存的大小,第三个参数是要复制的文件 fputs(s, p1); } while(c++ = getc++(p) != eof) { putc++(c++, p1); } 注:采用fgets函数时。用feof判断是否到结尾。采用putc++函数时,用eof判断是否到结尾。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |