宏定义、枚举、多文件编程、文件操作

宏定义

//预编译指令
#define NUM 10

这里我们在.c在遇到的NUM直接用它后面的内容替换

#include <stdio.h>
#define NUM 2 + 3
int main()
{
	printf("%d\n",NUM*2)//8
	//等价于2+3*2
	return 0;
}

宏是直接替换内容NUM*2 ==>2 + 3 * 2

宏函数

#include<stdio.h>
#define MAX(a,b) if(a>b){printf("%d",a);}else{printf("%d",b);}
int main()
{
	MAX(10,20)
	return 0;
}
  • 宏函数必须写在一行
  • 如果想写多行要用 \ 进行连接,但函数名,关键字不要用\连接
  • 主函数中调用宏函数后没有分号
  • 如果不知道自己写的对否,直接把宏函数copy到调用宏函数的位置,试一下。

枚举

定义:enum 枚举类型 {枚举值列表};

#include <stdio.h>
enum Enum
{
	SUN,
	MON,
	TUE,
	WES,
	THR,
	FRI,
	SAT,
};
int main()
{
	int week = SUN;
	week = MON;
	printf("%d %d",week,MON);//5 5
	return 0;
}

  • 如果MON = 2,则后面的枚举数依次加一,也就是SAT = 7,但SUN = 0
  • 如果MON = 10,则后面的枚举数依次加一,也就是SAT = 15,但SUN = 0
  • 如果SUN = 7,MON = 3,那么后面的数同样依次加一,也就是SAT = 8、

多文件编程

  • 多个.c文件的话就要包含头文件,库函数我们一般用<>,我们自己写的.h文件要用""表示
  • 例#include <stdio.h>编译时直接在软件设置的指定路径中寻找里面是否有stdio.h的库文件
  • #include "a.h"编译时先寻找你正在编辑的源代码文件所在的文件夹里面有没有a.h的库文件

变量和头文件的重复定义

a.h:
int max();
struct student {
	char name[10];
	int num;
};
 
b.h:
#include "a.h"
 
c.h:
#include "a.h"
 
main.c:
#include "b.h"
#include "c.h"
  • 上面的结构体和函数都出现了两次,重复包含指的是在不同头文件中包含了相同变量或函数
//以sample.h为例
#ifndef _SAMPLE_H_
#define _SAMPLE_H_ 
//文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,
#include<stdio.h>//其他头文件
//结构体宏定义等
//函数声明
#endif

文件操作

C语言中的文件操作,一般会用到fopen、fread、fwrite、fgets、fputs、fclose这几个函数

文件打开方式

打开文件说明
r以只读的方式打开文件,该文件必须存在
r+以读/写的方式打开文件,该文件必须存在
rb+以读/写的方式打开一个二进制文件,只允许读/写数据
rt+以读/写的方式打开一个文本文件,允许读和写
w打开只写文件,若文件存在则文件长度清为0,即文件内容消失,若不存在则创建该文件
w+打开可读/写文件,若文件存在则文件长度清为0,即文件内容消失,若不存在则创建该文件
a以附加的方式打开只写文件,若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)
a+以附加的方式打开可读/写文件,若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)
wb以只写的方式打开或新建一个二进制文件,只允许写数据
wb+以读/写的方式打开或新建一个二进制文件,允许读和写数据
wt+以读/写的方式打开或新建一个文本文件,允许读和写数据
at+以读/写的方式打开一个文本文件,允许读或在文件末尾追加数据
ab+以读/写的方式打开一个二进制文件,允许读或在文件末尾追加数据

fopen

语法和参数说明:

FILE *fopen(const char *filename, const char *mode);

filename : 要打开的文件名字符串
mode : 访问文件方式,详情看上面的文件打开方式

返回值

  • 成功:返回新打开文件的文件指针
  • 失败:返回NULL

fread

语法和参数说明:

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

buffer : 将文件中的二进制数据读取到该缓冲区中
size : 读取的基本单元字节大小,单位是字节,一般是buffer缓冲的单位大小 
count : 读取的基本单元个数
stream : 文件指针 

返回值

  • 成功:实际从文件中读取的基本单元 个数 ; 读取的字节数是 基本单元数 * 基本单元字节大小
  • 失败或读到文件末尾:返回0

fwrite

语法和参数说明:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

ptr : 指针指向要写出数据的内存首地址 
size : 要写出数据的基本单元的字节大小,写出单位的大小
nmemb : 要写出数据的基本单元的个数
stream : 文件指针 

返回值

  • 成功:实际写出到文件的基本单元个数;
  • 失败或文件末尾:一个短项计数(或零)

fgets

语法和参数说明:

char *fgets(char *s, int size, FILE *stream);

s : 存储字符串的位置 
size : 存储字符串的最大个数
stream : 文件指针 

返回值

  • 成功:返回字符串
  • 失败或文件结束:NULL

fputs

语法和参数说明:

int fputs(const char *str, FILE *stream)

str :  这是一个数组,包含了要写入的以空字符终止的字符序列。 
stream : 文件指针 

返回值

  • 成功:非负值
  • 失败:EOF

fclose

语法和参数说明:

int fclose(FILE * stream)

stream : 文件指针 

返回值

  • 成功:0
  • 失败:EOF
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晶小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值