Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言基础系列: 预处理+文件操作

C语言基础系列: 预处理+文件操作

作者头像
木杉乀
发布于 2021-04-01 22:35:04
发布于 2021-04-01 22:35:04
1.6K00
代码可运行
举报
文章被收录于专栏:木杉の小屋木杉の小屋
运行总次数:0
代码可运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
本人大一学生,以下文章作为学习笔记用于加深记忆和复习,并分享给其他需要的人.
内容不含标准概念,更容易理解.
内容面向c语言初学者

一. 预处理

一. 什么是预处理

代码执行之前的事情,命令以#开头

二. 常见的预处理

头文件

三. #define

是C语言的宏定义,本质是替换,会在预处理阶段对程序中所有出现的"宏名"的地方进行替换

一 宏替换
1.定义

#define 宏名 内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define PI 3.14159 //定义PI为3.14159 相当于给常量起名
#define NUM 3+1
int main(){
    int n = NUM * NUM;      //拆解 : 3 + 1 * 3 + 1 
    printf("n = %d\n", n);  //结果 : 7
    return 0;
}
二 带参宏
  1. 定义

#define 宏名(形参列表) 内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define ADD(a,b) a+b
  1. 举例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include 

// #define 宏名(形参列表) 内容
#define ADD(a,b) a+b
#define ADD1(a,b) (a+b)
// 注意:没有参数类型 没有返回值 本质:替换
int main()
{                                       // 拆解: n = a + b ;
int n = ADD(1,2);                       // 拆解: 1 + 2
printf("n = %d\n", n);                  // 结果: 3
n = ADD(1, ADD(5, 6))*ADD(3, 4);        // 拆解: 1 + 5 + 6 * 3 + 4
printf("n = %d\n", n);                  // 结果: 28
n = ADD1(1, ADD1(5, 6))*ADD1(3, 4);     // 拆解: ( 1 + (5 + 6) ) * (3 + 4)
printf("n = %d\n", n);                  // 结果: 84
double d = ADD(1.223, 2.456);           // 拆解: 1.223 + 2.456
printf("d = %lf\n", d);                 // 结果: 3.679000
return 0;
}

四 预编译条件

一 #ifdef 宏名
语法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifdef 宏名
    代码块;
#endif
规则:

根据宏名是否定义,如果定义了,就会执行代码块直到endif,否则不执行代码块

举例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include 

#define def_1 1;            // 宏定义 def_1

int main()
{
    #ifdef AAA            // 判断 def_1 宏名以被定义 执行代码块内容
    printf("宏名以被定义\n");
    #endif // AAA         // 结束宏判断
    
    return 0;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include

#define def_1 1                   // 宏定义 def_1

int main() {
                                 
#ifdef def_1                      // 判断是否定义宏名 def_1
	printf("以定义宏名 def_1");     // 结果
#else
	printf("未定义宏名 def_1");
#endif
	return 0;
}
二 #ifndef 宏名
语法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef 宏名
    代码块;
#else
    代码块;
#endif
规则: ( 与 ifdef 类似且相反 )

根据宏名是否定义,如果没有定义,就会执行相对代码直到endif,否则不执行代码块

举例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include

#define def_1 1                    // 宏定义 def_1

int main() {

#ifndef def_1                      // 判断是否定义宏名 def_1
	printf("未定义宏名 def_1");
#else
	printf("以定义宏名 def_1");      // 结果
#endif
	return 0;
}
常用事件:

令某代码永远只执行一次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef def_1
#define def_1
     //代码块
#endif
三 #if 表达式
语法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#if(表达式)
// 代码块1;
#else
// 代码块2;
#endif
规则:

如果表达式为真 , 执行代码块 1 ,否则执行代码块 2.

举例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include 

int main() {
    
#if(1)
	printf("yes\n");
#else
	printf("no\n");
#endif
    
    return 0;
}

二 文件操作

一 什么是文件

ps:除了文件夹,都是文件

文件的后缀名: .docx .txt .c .cpp .exe .bat .csv …

二 文件名

名字.后缀

三 文件路径

1 相对路径: 从当前项目开始到目标文件

2 绝对路径: 从根目录开始到目标文件

以: 路径 + 名字.后缀 来确定文件

四 操作文件 ( 正文开始 )

更多内容参考:https://www.runoob.com/cprogramming/c-file-io.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     1、定义文件指针  FILE*file;
     2、open(“路径”,“打开方式”)打开文件
     3、文件的打开方式
         “r”(只读) 为了输入数据,打开一个已存在的文本文件 出错
         “w”(只写) 为了输出数据,打开一个文本文件 新建文件
         “a”(追加) 向文本文件尾部添加数据 出错
         “rb”(只读) 为了输入数据,打开一个已存在的二进制文件 出错
         “wb”(只写) 为了输出数据,打开一个二进制文件 新建文件
         “ab”(追加) 向二进制文件尾部添加数据 出错
         “r+”(读写) 为了读和写,打开一个文本文件 出错
         “w+”(读写) 为了读和写,打开一个文本文件 新建文件
         “a+”(读写) 为了读和写,打开一个文本文件 出错
         “rb+”(读写) 为了读和写,打开一个二进制文件 出错
         “wb+”(读写) 为了读和写,打开一个二进制文件 新建文件
         “ab+”(读写) 为了读和写,打开一个二进制文件 出错
     4、fclose()关闭文件
     5、fgetc(文件指针) 读取一个字符
     6、fputc(字符,文件指针) 写入一个字符
     7、fgets(字符指针,大小,文件指针) 读取一行字符,读n个
     8、fpust(字符串,文件指针) 写入一串字符
     9、fprintf(文件指针,"格式占位符...",变量...);  格式化写入文件
    10、fscanf(文件指针,“格式占位符...",变量...); 格式化读取
以二进制方式读写数据
    11、fread(用来保存的字符数组,数据类型的大小,数据的个数,文件指针);从文件中获取格式化的
数据
    12、fwrite(需要写进去字符数组, 数据类型的大小,数据的个数, 文件指针);向文件中写入数据
    13、fseek(文件指针,偏移量,起始点);  移动文件指针
        偏移量为正数往后移动,负数往前移动
        起始点用012代替
            0SEEK_SET)代表文件开始位置
            1SEEK_CUR)代表当前位置
            2SEEK_END )代表文件末尾位置
    14、ftell(文件指针)  获取文件指针的偏移量
    15、feof(文件指针) 判断文件指针是否读到末尾,读到了末尾返回真,反之假
              
备注:进行文件操作的时候,记得文件怎么写入的就怎么读出来,读写最好不要同时进行,注意你的操作和打
开方式
一 单个字符读写

在 main.c ( 项目源文件 ) 同文件夹内 创建tese1.txt文件

在文件内键入内容:例如: “IAmMuShan”

*此处不建议输入中文 fgetc() 单个字符读写读取 1 byte ,汉字一个字符一般 2 byte 无法正常读取

本人代码新人,此处引文 : https://bbs.csdn.net/topics/390325904

关键词: fgetc(获取单个字符) putchar (释放单个字符)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void function1() {
	// 1 定义变量: 文件指针
	FILE* pfile = NULL;
	char ch = 0;

	// 2 打开文件(文件指针指向文件地址) fopen参数: 文件路径,打开方式
	pfile = fopen("text1.txt", "r");   // r 为只读 此处如果文件不与代码源文件同路径则填写路径

	// 3 读取(文件 ==> 程序)
	// 获取一个字符 fgetc参数: 文件
	ch = fgetc(pfile);

	// 4 在控制台输出读取字符
	putchar(ch);
	printf("\nch = %c\n", ch);              // 结果 : i

	// 5 继续向后读取
	putchar(fgetc(pfile));
	printf("\n%c\n",fgetc(pfile));          // 结果 : a
	// ==> 只需要调用方法 会自动向后读取

	// 6 关闭文件(取消文件指针地址指向)
	fclose(pfile);
	pfile = NULL;

	// 7 重新打开文件
	pfile = fopen("text1.txt", "w");          //以写的方式打开文件;

	// 8 将单个字符写入到文件(程序 ==> 文件)
	fputc('X',pfile);
	// ==> 会清除原来的数据 重新写入
	fputc('Y',pfile);
	// ==> 第一次写入到关闭之前 会自动依次写入

	// 9 关闭文件
	fclose(pfile);
	pfile = NULL;

}
二 字符串的读写

在 main.c ( 项目源文件 ) 同文件夹内 创建tese2.txt文件

在文件内键入内容:例如: “ILoveYou”

*此处虽然理论如果选择4个长度就能出来2个汉字的样子,依旧不建议用中文,根据编译器不同,可能出现各种乱码

关键词: fgets(获取字符串) fputs(释放字符串)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void function2() {
	FILE * pfile = NULL;
	char str[20] = { };             //初始化字符串数组

	pfile = fopen("text2.txt","r"); //只读方式打开文件

	// 字符串读取函数(文件 ==> 程序)
	// 参数:存储目标,长度(byte),资源文件
	fgets(str , 5 , pfile);
	puts(str);
	printf("%s\n",str);
	// ==> 此处只会出现4个字符 因为'\0'占据一个位置(\0为字符串结束的标志)
	
	fclose(pfile);
    pfile = NULL;
    
	pfile = fopen("text2.txt", "a"); // a:追加
	
	char str1[10] = "hello";
	
	// 字符串输出函数(程序==>文件)
	// 参数:资源,文件
	fputs(str1, pfile);
	
	fclose(pfile);
    pfile = NULL;
    
}
三 格式化读写

在 main.c ( 项目源文件 ) 同文件夹内 创建tese3.txt文件

特点: 格式化顾名思意会在读写时清空初始内容

关键词: fscanf(格式化输入) fprintf(格式化输出)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 三 格式化读写
void function3()
{
	FILE* pfile;
	int num0 = 100, num1 = 0;
	float f0 = 1.2f, f1 = 0.0f;
	char str0[10] = "123abc#", str1[10] = {};

	pfile = fopen("text3.txt", "w");      //此处如果文件未创建或找不到文件名会在路径内自动创建

	// 程序==>文件
	// 参数: 文件,格式,obj
	fprintf(pfile, "%d,%f,%s", num0, f0, str0);

	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text3.txt", "r");      //此处如果文件未创建或找不到文件名 那计算机就懵逼了哈哈哈

	// 文件==>程序
	fscanf(pfile, "%d,%f,%s", &num1, &f1, &str1);

	printf("%d , %f , %s\n", num1, f1, str1);       //结果:100 , 1.200000 , 123abc#

	fclose(pfile);
	pfile = NULL;
    
}
四 二进制形式读写

关键词: fwrite(用于二进制写入) fread(用于二进制读取)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 四 二进制形式读写
void function4()
{
	FILE* pfile = NULL;
	int arr0[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int arr1[10] = {};

	pfile = fopen("text4.txt", "wb");         // "wb"为二进制形式写入
	fwrite(arr0, sizeof(int), 10, pfile);
	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text4.txt", "rb");         // "rb"为二进制形式读取
	fread(arr1, sizeof(int), 10, pfile);
	for (size_t i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);               // 结果: 0 1 2 3 4 5 6 7 8 9
	}
	fclose(pfile);
	pfile = NULL;

}

由于是二进制读写 text4.txt 打开无法查看内容

五 指定位置读写

通过fseek(偏移函数)改变读写位置

关键词: fseek_偏移函数

用法: fseek(文件指针,偏移量(以字节为单位),初始位置)

初始位置预处理常量:

SEEK_CUR 1 当前位置

SEEK_END 2 文件末尾

SEEK_SET 0 文件开头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void function5()
{
	FILE* pfile;
	char str[100] = {};
	if ((pfile = fopen("text5.txt", "r")) != NULL)
	{
		printf("文件打开成功!\n");
	}
	else
	{
		printf("文件打开失败!\n");
	}
	// 正常读取
	putchar(fgetc(pfile));
	putchar('\n');
/*
	C 库函数 int fseek(FILE *stream, long int offset, int whence)
	设置流 stream 的文件位置为给定的偏移 offset,
	参数 offset 意味着从给定的 whence 位置查找的字节数。
	参数:
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	offset -- 这是相对 whence 的偏移量,以字节为单位。
	whence -- 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
	SEEK_SET 文件的开头
	SEEK_CUR 文件指针的当前位置
	SEEK_END 文件的末尾
	#define SEEK_CUR  1
	#define SEEK_END  2
	#define SEEK_SET  0
	返回值:
	如果成功,则该函数返回零,否则返回非零值。
*/
    fseek(pfile, 2, SEEK_END); //使文件指针指向指定位置
	fgets(str, 6, pfile);
/*
	C 库函数 int ferror(FILE *stream) 测试给定流 stream 的错误标识符。
	参数:
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值:
	如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。
*/
    if (ferror(pfile))
	{
		printf("文件读取失败!\n");
	}
	else
	{
		printf("文件读取成功!\n");
	}
	// 打印读取的内容
	puts(str);
/*
	描述
	C 库函数 void clearerr(FILE *stream) 清除给定流 stream 的文件结束和错误标识符。
	参数
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值
	这不会失败,且不会设置外部变量 errno,
	但是如果它检测到它的参数不是一个有效的流,则返回 -1,并设置 errno 为 EBADF。
*/
	clearerr(pfile); //清除读取/写入/ferror函数报错后出现错误的错误标志
/*
	描述
	C 库函数 void rewind(FILE *stream) 设置文件位置为给定流 stream 的文件的开头。
	参数
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值
	该函数不返回任何值。
*/
	rewind(pfile);//强制使文件指针指向文件开头
/*
	描述
	C 库函数 int feof(FILE *stream) 测试给定流 stream 的文件结束标识符。
	参数
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值
	当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。
*/
	while (!feof(pfile)) //feof函数判断是否读到文件末尾
	{
		putchar(fgetc(pfile));
	}
	putchar('\n');
	if (fclose(pfile) == EOF)
	{
		printf("文件关闭失败!\n");
	}
	else
	{
		printf("文件关闭成功!\n");
	}
}

完整代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include

void function1();   //一. 单个字符读写
void function2();   //二. 字符串的读写

int main() {
	printf("function1:\n");
	function1();
	printf("\nfunction2:\n");
	function2();
	printf("\nfunction3:\n");
	function3();
	printf("\nfunction4:\n");
	function4();
	printf("\nfunction5:\n");
	function5();
}

void function1() {
	// 1 定义变量: 文件指针
	FILE* pfile = NULL;
	char ch = 0;

	// 2 打开文件(文件指针指向文件地址) fopen参数: 文件路径,打开方式
	pfile = fopen("text1.txt", "r");   // r 为只读 此处如果文件不与代码源文件同路径则填写路径

	// 3 读取(文件 ==> 程序)
	// 获取一个字符 fgetc参数: 文件
	ch = fgetc(pfile);

	// 4 在控制台输出读取字符
	putchar(ch);
	printf("\nch = %c\n", ch);              // 结果 : i

	// 5 继续向后读取
	putchar(fgetc(pfile));
	printf("\n%c\n",fgetc(pfile));          // 结果 : a
	// ==> 只需要调用方法 会自动向后读取

	// 6 关闭文件(取消文件指针地址指向)
	fclose(pfile);
	pfile = NULL;

	// 7 重新打开文件
	pfile = fopen("text1.txt", "w");          //以写的方式打开文件;

	// 8 将单个字符写入到文件(程序 ==> 文件)
	fputc('X',pfile);
	// ==> 会清除原来的数据 重新写入
	fputc('Y',pfile);
	// ==> 第一次写入到关闭之前 会自动依次写入

	// 9 关闭文件
	fclose(pfile);
	pfile = NULL;

}

void function2() {
	FILE * pfile = NULL;
	char str[20] = { };             //初始化字符串数组

	pfile = fopen("text2.txt","r"); //只读方式打开文件

	// 字符串读取函数(文件 ==> 程序)
	// 参数:存储目标,长度(byte),资源文件
	fgets(str , 5 , pfile);
	puts(str);
	printf("%s\n",str);
	// ==> 此处只会出现4个字符 因为'\0'占据一个位置(\0为字符串结束的标志)

	fclose(pfile);
    pfile = NULL;

	pfile = fopen("text2.txt", "a"); // a:追加

	char str1[10] = "hello";

	// 字符串输出函数(程序==>文件)
	// 参数:资源,文件
	fputs(str1, pfile);

	fclose(pfile);
    pfile = NULL;

}

// 三 格式化读写
void function3()
{
	FILE* pfile;
	int num0 = 100, num1 = 0;
	float f0 = 1.2f, f1 = 0.0f;
	char str0[10] = "123abc#", str1[10] = {};

	pfile = fopen("text3.txt", "w");

	// 程序==>文件
	// 参数: 文件,格式,obj
	fprintf(pfile, "%d,%f,%s", num0, f0, str0);

	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text3.txt", "r");

	// 文件==>程序
	fscanf(pfile, "%d,%f,%s", &num1, &f1, &str1);

	printf("%d , %f , %s\n", num1, f1, str1);

	fclose(pfile);
	pfile = NULL;
}

// 四 二进制形式读写
void function4()
{
	FILE* pfile = NULL;
	int arr0[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int arr1[10] = {};

	pfile = fopen("text4.txt", "wb");
	fwrite(arr0, sizeof(int), 10, pfile);
	fclose(pfile);
	pfile = NULL;

	pfile = fopen("text4.txt", "rb");
	fread(arr1, sizeof(int), 10, pfile);
	for (size_t i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	fclose(pfile);
	pfile = NULL;

}

// 指定位置读写
void function5()
{
	FILE* pfile;
	char str[100] = {};
	if ((pfile = fopen("text5.txt", "r")) != NULL)
	{
		printf("文件打开成功!\n");
	}
	else
	{
		printf("文件打开失败!\n");
	}
	// 正常读取
	putchar(fgetc(pfile));
	putchar('\n');
	/*
	C 库函数 int fseek(FILE *stream, long int offset, int whence)
	设置流 stream 的文件位置为给定的偏移 offset,
	参数 offset 意味着从给定的 whence 位置查找的字节数。
	参数:
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	offset -- 这是相对 whence 的偏移量,以字节为单位。
	whence -- 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
	SEEK_SET 文件的开头
	SEEK_CUR 文件指针的当前位置
	SEEK_END 文件的末尾
	#define SEEK_CUR  1
	#define SEEK_END  2
	#define SEEK_SET  0
	返回值:
	如果成功,则该函数返回零,否则返回非零值。
	*/
	fseek(pfile, 2, SEEK_END); //使文件指针指向指定位置
	fgets(str, 6, pfile);
	/*
	C 库函数 int ferror(FILE *stream) 测试给定流 stream 的错误标识符。
	参数:
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值:
	如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。
	*/
	if (ferror(pfile))
	{
		printf("文件读取失败!\n");
	}
	else
	{
		printf("文件读取成功!\n");
	}
	// 打印读取的内容
	puts(str);
	/*
	描述
	C 库函数 void clearerr(FILE *stream) 清除给定流 stream 的文件结束和错误标识符。
	参数
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值
	这不会失败,且不会设置外部变量 errno,
	但是如果它检测到它的参数不是一个有效的流,则返回 -1,并设置 errno 为 EBADF。
	*/
	clearerr(pfile); //清除读取/写入/ferror函数报错后出现错误的错误标志
	/*
	描述
	C 库函数 void rewind(FILE *stream) 设置文件位置为给定流 stream 的文件的开头。
	参数
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值
	该函数不返回任何值。
	*/
	rewind(pfile);//强制使文件指针指向文件开头
	/*
	描述
	C 库函数 int feof(FILE *stream) 测试给定流 stream 的文件结束标识符。
	参数
	stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
	返回值
	当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。
	*/
	while (!feof(pfile)) //feof函数判断是否读到文件末尾
	{
		putchar(fgetc(pfile));
	}
	putchar('\n');
	if (fclose(pfile) == EOF)
	{
		printf("文件关闭失败!\n");
	}
	else
	{
		printf("文件关闭成功!\n");
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C语言】文件操作详解
如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。
大耳朵土土垚
2024/03/13
1450
【C语言】文件操作详解
【C语言基础】:文件操作详解(后篇)
将字符写入流 将一个字符写入流并推进位置指示器。 字符被写入流的内部位置指示器所指示的位置,然后自动向前移动一个。
爱喝兽奶的熊孩子
2024/04/11
1710
【C语言基础】:文件操作详解(后篇)
轻松拿捏C语言——【文件操作】
程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows 环境后缀为.exe)
用户11162265
2024/06/14
1030
轻松拿捏C语言——【文件操作】
C语言详解(文件操作)1
我们写的程序的数据存储在电脑的内存中,如果没有文件,当程序退出的时候,内存会回收,那数据就丢失了,等再次运行程序是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们就要使用文件。
_小羊_
2024/10/16
780
C语言详解(文件操作)1
深入挖掘C语言 ---- 文件操作
我们程序的数据需要输出到各种外部设备, 也需要从外部设备获取数据, 不同的外部设备的输入输出操作各不相同, 为了方便程序员对各种外部设备进行方便的操作, 我们抽象出了流的概念, 我们可以把流想象成流淌着字符的河.
用户11317877
2024/10/16
1300
深入挖掘C语言 ---- 文件操作
C语言——文件操作
在程序设计中,我们⼀般从文件功能的角度来分类 分为 程序⽂件 、 数据⽂件 。
用户11352420
2024/11/07
1650
C语言——文件操作
C语言重点突破(六)文件操作
我们在前面的文章介绍了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。 我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。 这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。 使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。
对编程一片赤诚的小吴
2024/01/23
1470
C语言重点突破(六)文件操作
C语言中的文件和文件操作
硬盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能角度来分类的)。
用户11305458
2024/10/09
1500
C语言中的文件和文件操作
确定不进来看看吗?详细讲解C语言文件操作(示例分析每个函数)
C语言的文件操作其实很少用到,因为在后期工作中他们大多数都被封装好了,我们直接使用就行,但是对于一名修内功的程序员,了解更加底层的实现方式,还是很有价值的.
初阶牛
2023/05/04
7080
确定不进来看看吗?详细讲解C语言文件操作(示例分析每个函数)
C语言文件读写操作(详解)
文件是一段数据的集合,这些数据可以是有规则的,也可以是无序的集合。在stdio.h有一个非常重要的东西,文件指针,每个文件都会在内存中开辟一块空间,用于存放文件的相关信息,这些信息保存在一个结构体中: struct _iobuf { char *_ptr; //指向buffer中第一个未读的字节 int _cnt; //记录剩余的未读字节的个数 char *_base;//文件的缓冲 int _flag;//打开文件的属性 int _file;//获取文件描述 int _charbuf;//单字节的缓冲,即缓冲大小仅为1个字节 int _bufsiz;//记录这个缓冲大小 char *_tmpfname;//临时文件名 }; typedef struct _iobuf FILE; FILE是一个数据结构,用于访问一个流。每个流都会对应一个FILE结构体。
全栈程序员站长
2022/09/05
1.9K0
C语言进阶-文件操作超详解
scanf/printf、fscanf/fprintf、sscanf/sprintf函数对比
用户9645905
2022/11/30
1K0
C语言进阶-文件操作超详解
【C】语言文件操作(二)
继【C】语言文件操作(一)中我们详细地介绍了文件的顺序读写等一系列函数,这篇文章相对上一章内容较少,但也得认真学习奥~ 与前一篇一样,每个函数都附有超链接,方便大家查阅文献
阿伟@t
2023/10/10
2450
【C】语言文件操作(二)
C语言文件操作
我们前面学习结构体时,写通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。
绝活蛋炒饭
2024/12/16
1300
C语言文件操作
C语言中的文件与文件操作入门
在C语言中,文件操作是一个非常重要的部分,它允许程序与外部数据进行交互,如读取文本文件、写入数据到文件等。对于初学者来说,理解文件操作的基本概念以及如何使用C语言进行文件操作是十分必要的。
小志biubiu
2025/02/27
1080
C文件读写
可以将程序中的数据保存为一个文件。待下次重新启动程序时,从之前保存的文件中提取数据。这样,程序就不会在重启后失忆了。
WuShF
2023/03/03
3.4K0
C文件读写
C语言——P/文件操作
如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。
用户11015888
2024/03/11
2140
C语言——P/文件操作
【C语言】文件操作
磁盘(硬盘)上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。
用户11290673
2024/09/25
1490
【C语言】文件操作
【c语言】玩转文件操作
我们在写程序的时候,往往会将数据存放在变量当中。如果程序退出,内存回收,这些数据就会丢失。那么我们是否有办法对这些数据进行持久化的保存,再次打开程序时数据仍然存在?答案是肯定的。而能够做到这件事的就是:文件操作。
ephemerals__
2024/10/24
2190
【c语言】玩转文件操作
文件操作——C语言
如果没有文件,我们写的程序的数据都是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等程序再次运行,我们是无法看到上次程序的数据的。如果想要将数据持久化的保存,我们可以使用文件来存储数据。
星辰与你
2024/10/17
1480
文件操作——C语言
深度解析C语言文件操作
我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以在通讯录中添加、删除数据,此时数据是存放在内存中的,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录时,数据又得重新导入,如果这样使用通讯录就很难受。 既然是通讯录就应该记录下来,只有我们自己选择删除数据得时候,数据才不复存在。这就涉及到了数据得持久化得问题,我们一般数据持久化得方法有,把数据存放在磁盘文件、存放到数据库等方式。 使用文件我们就可以将数据存放在电脑的硬盘上,做到数据的持久化。
Yui_
2024/10/16
1520
深度解析C语言文件操作
相关推荐
【C语言】文件操作详解
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验