文件读写
我们用**fopen()**来新建一个文件或打开一个已有的文件.
函数原型为File *fopen(const char *filename , const char *mode)
filename是文件名,mode代表访问方式。
mode | 访问模式 |
---|---|
r | 打开一个已有的文本文件,允许读取文件 |
w | 若无此文件,新建一个文件,从文件头开始写;若有此文件,截断文件为零长度,重新写入 |
a | 打开一个文本文件,以追加模式写入,若无此文件,新建一个文件 |
r+ | 打开一个文本文件,允许读写文件 |
w+ | 打开一个文本文件,允许读写文件,若没有此文件,新建一个文件 |
a+ | 打开一个文本文件,允许读写文件,写文件时,只允许以追加模式写入 |
若访问二进制文件,mode后加上b就可以了
fclose(FILE *fl)
关闭文件成功返回0,关闭失败返回EOF。调用此函数,先清空缓存区数据,再关闭文件,再释放用于该文件的所用内存。
fputc(int ch,FILE *fl)
将字符ch的值写入指向fl的输出流中,若写入成功,返回ch的值,写入失败则返回EOF。
fputs(const *char ch , FILE *fl)
将字符串ch写入到指向fl的输出流中,若写入成功返回不为零,写入失败返回EOF。
fgetc(FILE *fl)
从写入文件的输入流中获取一个单个字符,返回值为读取到的字符,失败返回EOF
fgets(FILE *fl)
从输入流中获取一串字符直到遇到终止符或EOF,遇到空格也会停止,只返回读取到的字符。先读取一串字符除了最后的字符或空格,放至缓存区,在末尾加上null字符返回字符串。
引用头文件
两种方式:
#include <file>
#include "file"
一般我们用global.h来导入所有头文件。
还有许多预处理器命令:#define宏定义,#include导入源代码文件,#undef取消已定义的宏,#ifdef如果已定义,#ifndef若没有定义,#if,#else,#elif,#endif结束一个if-else块,#error若发生标准错误,产生标准错误信息,#pragma使用标准化方法,向编译器发布特殊的命令到编译器中
递归
函数自身调用本身成为递归。
求阶乘,经典的斐波那契数列都是用递归的思想来做的,但与while迭代相比,他占用了更多的栈空间,尾递归可以在一定程度上减少堆栈的浪费,尾递归就是函数的返回结果不是表达式的一部分的递归函数。