文件操作;

目录

1.文件的打开与关闭;

打开文件;

关闭文件;

2.文件的打开方式;

“r”(只读);

“w”(只写);

3.文件的顺序读写;

字符输入函数fgetc

代码1:

代码2(标准输入流):

字符输出函数fputc

代码1(文件输出流):

代码2(标准输出流):

文本行输入函数fgets

代码1(文件输入流):

代码2(标准输入流):

文本行输出函数fputs

代码1(文件输出流):

代码2(标准输出流):

格式化输入函数fscanf

代码1(文件输入流):

代码2(标准输入流):

格式化输出函数fprintf

代码1(文件输入流):

代码2(标准输出流):

sscanf和sprintf

代码:

二进制输入fread

代码:

二进制输出fwrite

代码:

4.文件的随机读写;

fseek:

简要介绍:

代码举例:

代码分析:

运行结果:​编辑

ftell:

简要介绍:

代码举例:

代码分析:

运行结果:

rewind:

简要介绍:

代码举例:

代码分析:

运行结果:

5.文件结束判断;

用途:

代码举例:

代码分析:

运行结果:

6.文件缓冲区;

简要介绍:

代码举例:

代码分析:

运行结果:


1.文件的打开与关闭;

打开文件;

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

关闭文件;

int fclose ( FILE * stream);

2.文件的打开方式;

“r”(只读);

为了输入数据,打开一个已经存在的文本文件;如果指定文件不存在会出错;
代码:
#include <stdio.h>
int main()
{
	FILE* pFile;
	//打开文件
	pFile = fopen("myfile.txt", "r");
	//文件操作
	fclose(pFile);
	return 0;
}

代码分析:

从图中看,文件夹所在位置并没有要读的文件,所以运行结果应该是出现错误;

运行结果:

“w”(只写);

为了输出数据,打开一个文本文件;如果指定文件不存在会建立一个新的文件;
代码:
#include <stdio.h>
int main()
{
	FILE* pFile;
	//打开文件
	pFile = fopen("myfile.txt", "w");
	//文件操作
	if (pFile != NULL)
	{
		fputs("fopen example", pFile);
		//关闭文件
		fclose(pFile);
	}
	return 0;
}

代码分析:

这里文件的使用方式是只写,有这个文件就打开这个文件,没有就创建这个文件,然后判断是否是空指针,如果不是,用fputs将字符串写入这个文件,关闭文件;

运行结果:

3.文件的顺序读写;

字符输入函数fgetc

适用于所有输入流;
代码1:
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.text", "r");///要读文件

	if (NULL == pf)//现在是相对路径,在现在的路径下;
	{
		perror("fopen->pf");//因为源c所在的位置没有data.text
		return;
	}
	//从文件顺序往后读;
	int ch=fgetc(pf);//给data写字符;
	printf("%c\n", ch);
	ch = fgetc(pf);//给data写字符;
	printf("%c\n", ch);
	ch = fgetc(pf);//给data写字符;
	printf("%c\n", ch);
	ch = fgetc(pf);//给data写字符;
	printf("%c\n", ch);
	fclose(pf);
	pf = NULL;//否则置为野指针;
	return 0;
}

代码1分析:

在data.text文件内输入abcd,以只读的文件使用方式打开文件,并判断返回的是否是空指针;如果不是空指针,使用fgetc函数读取字符并放在ch里,打印出来;

运行结果:

代码2(标准输入流):
#include<stdio.h>
int main()
{
	FILE* pf = fopen("data.txt", "r");///要读文件

	if (NULL == pf)//现在是相对路径,在现在的路径下;
	{
		perror("fopen->pf");//因为源c所在的位置没有data.text
		return;
	}
    //从键盘顺序往后读
	int ch = fgetc(stdin);//给data写字符;
	printf("%c\n", ch);
	ch = fgetc(stdin);//给data写字符;
	printf("%c\n", ch);
	ch = fgetc(stdin);//给data写字符;
	printf("%c\n", ch);
	ch = fgetc(stdin);//给data写字符;
	printf("%c\n", ch);
	fclose(pf);
	pf = NULL;//否则置为野指针;
	return 0;
}

代码2分析:

fgetc从键盘上的得到数据,并打印;

运行结果:

字符输出函数fputc

适用于所有输出流;
代码1(文件输出流):
#include<stdio.h>
int main()
{	
	FILE* pf = fopen("light.text", "w");//文件不存在就创建一个;
	if (NULL == pf)//现在是相对路径,在现在的路径下;
	{
		perror("fopen->pf");//因为源c所在的位置没有data.text
		return;
	}
	fputc('a', pf);//给data写字符;
	fputc('b', pf);//每次写完之后,文件指针向后偏移一个;
	fputc('c', pf);
	
	fclose(pf);
	pf = NULL;//否则置为野指针;
	return 0;
}

代码1分析:

打开一个文件,以只写的方式,判断是否是空指针;如果不是空指针,使用fputc把字符放到文件里;

运行结果:
代码2(标准输出流):
#include<stdio.h>
int main()
{	
	FILE* pf = fopen("light.text", "w");//文件不存在就创建一个;
	if (NULL == pf)//现在是相对路径,在现在的路径下;
	{
		perror("fopen->pf");//因为源c所在的位置没有data.text
		return;
	}
	int i = 0;
    for (i = 0;i < 26;i++)
    {
	
	fputc('a' + i, stdout);//这里stdout是标准输出,在屏幕上;
    }
	fclose(pf);
	pf = NULL;//否则置为野指针;
	return 0;
}

代码2分析:

使用fputc,将字符输出到屏幕上;

运行结果:

文本行输入函数fgets

适用于所有输入流;
代码1(文件输入流):
#include <stdio.h>
int main()
{
	FILE* x=fopen("data.txt", "r");
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	
	char arr[10] = { 0 };
	fgets(arr,10,x);//x是从哪读,10 是读几个,arr是读了放到那;读的时候遇到换行不读,读到10-1加\n结束;
	printf("%s\n", arr);
	fgets(arr, 10, x);//x是从哪读,10 是读几个,arr是读了放到那;读的时候遇到换行不读,读到10-1加\n结束;
	printf("%s\n", arr);
	
	fclose(x);
	x = NULL;
	return 0;
}

代码1分析:

文件里字符的安放:

fgets规则:遇到换行不读;读到第n-1个字符后,后面直接换行结束;

运行结果:
代码2(标准输入流):
#include <stdio.h>
int main()
{
	FILE* x=fopen("data.txt", "r");
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	char arr[10] = { 0 };
	//从屏幕上读
	fgets(arr, 10, stdin);//x是从哪读,10 是读几个,arr是读了放到那;读的时候遇到换行不读,读到10-1加\0结束;
	printf("%s\n", arr);
	fgets(arr, 10, stdin);//x是从哪读,10 是读几个,arr是读了放到那;读的时候遇到换行不读,读到10-1加\0结束;
	printf("%s\n", arr);
	
	fclose(x);
	x = NULL;
	return 0;
}

代码2分析:

fgets:从键盘上读10个字符存入arr;

运行结果:

文本行输出函数fputs

适用于所有输入流;
代码1(文件输出流):
#include <stdio.h>
int main()
{
	FILE* x=fopen("data.txt", "w");
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	char arr[10] = { 0 };
	
	fputs("light abc\n", x);//换行\n;
	fputs("light adc", x);//只是一行;打印文件里;
	
	
	fclose(x);
	x = NULL;
	return 0;
}

代码1分析:

fputs函数把字符串输入到文件里;

运行结果:
代码2(标准输出流):
#include <stdio.h>
int main()
{
	FILE* x=fopen("data.txt", "w");
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	char arr[10] = { 0 };
	
	fputs("light abc\n", stdout);//打印屏幕上;
	fputs("light adc",stdout);
	
	
	fclose(x);
	x = NULL;
	return 0;
}

代码2分析:

fputs把字符串输入到屏幕上;

运行结果:

格式化输入函数fscanf

适用于所有输入流;
代码1(文件输入流):
#include<stdio.h>
struct S
{
	int age;
	float height;
};
int main()
{

	/*FILE* x = fopen("data.text", "w");*///以写的方式;
	FILE* x = fopen("data.txt", "r");//以读的方式  
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
    struct S a = {0};
    fscanf(x, "%d %f", &(a.age), &(a.height));//读到的放到a里面;
	printf("%d %f", a.age, a.height);


	fclose(x);
	x = NULL;
	return 0;
}

代码1分析:

以只读的方式打开文件,判断是否是空指针;如果不是,使用fscanf函数,从文件里格式化形式读取文件,读到的结果放到a中;

运行结果:
代码2(标准输入流):
#include<stdio.h>
struct S
{
	int age;
	float height;
};
int main()
{

	/*FILE* x = fopen("data.text", "w");*///以写的方式;
	FILE* x = fopen("data.txt", "r");//以读的方式  
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
    struct S a = {0};
    fscanf(stdin, "%d %f", &(a.age), &(a.height));//从屏幕上读,读到的放到a里面;
	printf("%d %f", a.age, a.height);
    fclose(x);
	x = NULL;
	return 0;
}

代码2分析:

从键盘上读取数据,格式化的形式放到a中;

运行结果:

格式化输出函数fprintf

适用于所有输出流;
代码1(文件输入流):
#include<stdio.h>
struct S
{
	int age;
	float height;
};
int main()
{

	FILE* x = fopen("data.text", "w");//以写的方式;
	
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	struct S a = { 18,1.78f };//写文件的时候
	
	//写文件
	fprintf(x, "%d %f", a.age, a.height);//存到x里面;
    fclose(x);
	x = NULL;
	return 0;
}

代码1分析:

将a中的内容格式化形式放到x里;

运行结果:
代码2(标准输出流):
#include<stdio.h>
struct S
{
	int age;
	float height;
};
int main()
{

	FILE* x = fopen("data.text", "w");//以写的方式;
	
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	struct S a = { 18,1.78f };//写文件的时候
	
	//写文件
	fprintf(stdout, "%d %f", a.age, a.height);
    fclose(x);
	x = NULL;
	return 0;
}

代码2分析:

将a中的内容格式化输出到屏幕上;

运行结果:

sscanf和sprintf

代码:
#include<stdio.h>
struct s
{
	int age;
	float height;
	char name[10];
};
int main()
{
	struct s abc = { 18,.name = "abc",.height = 1.78f };
	struct s tem = { 0 };
	char name1[30] = { 0 };
	sprintf(name1, "%d %f %s", abc.age, abc.height, abc.name);//把abc的内容以中间要求的格式变成字符串存到name1里;
	printf("%s", name1);
	sscanf(name1,"%d %f %s",&(tem.age),&(tem.height),&(tem.name));//把字符串name1中的字符串以格式化的形式给结构变量tem
	printf("%d %f %s", tem.age, tem.height, tem.name);
	return 0;
}

代码分析:

sscanf:从字符串中读取格式化数据;sprintf:将格式化的数据转为字符串;将abc中的内容以格式化的形式放到name1里,形成字符串,打印出来;再将name1的字符串以格式化的方式放到tem中,打印出来;

运行结果:

二进制输入fread

适用于文件;
代码:
#include<stdio.h>
struct s
{
	int age;
	float height;
	char name[10];
};
int main()
{
	FILE* x = fopen("data1.text", "rb");
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	struct s aw = { 0 };
	fread(&aw, sizeof(struct s), 1, x);//写到aw文件里;  //返回读到的个数;
	printf("%d %f %s", aw.age, aw.height, aw.name);//打印观察效果;
	fclose(x);
	x = NULL;
	return 0;
}

代码分析:

事先写入二进制文件(fwrite的运行结果图),将x中内容写到aw中;

运行结果:

二进制输出fwrite

适用于文件;
代码:
#include<stdio.h>
struct s
{
	int age;
	float height;
	char name[10];
};
int main()
{
	FILE* x = fopen("data1.text", "wb");
	if (NULL == x)
	{
		perror("fopen");
		return;
	}
	struct s aw = { 15,1.78f,"daaf" };
	fwrite(&aw,sizeof(struct s),1,x);//写到x文件里;
	return 0;
}

代码分析:

以二进制只写的方式打开文件,判断是否是空指针;不是的话,将aw中的内容写到x里;这里sizeof()是要写数据的类型大小;1是表示写几个;

运行结果:

4.文件的随机读写;

fseek:

简要介绍:

int fseek ( FILE * stream, long int offset, int origin );stream是文件指针;offset是偏移量,+表示往右偏移,-表示往左偏移;origin:共有三种:

SEEK_SETBeginning of file
SEEK_CURCurrent position of the file pointer
SEEK_ENDEnd of file *
代码举例:
#include<stdio.h>
int fseek ( FILE * stream, long int offset, int origin );//起始位置偏移0就可以得到起始位置
//通过fseek定位指针;
int main()
{
	FILE* x = fopen("data.text", "r");
	int ch = fgetc(x);//一开始默认在开头 
	printf("%c\n", ch);
	ch = fgetc(x);
	printf("%c\n", ch);
	ch = fgetc(x);
	printf("%c\n", ch);
	ch = fgetc(x);
	printf("%c\n", ch);//abcd efghi
	fseek(x, 2, SEEK_CUR);//2表示右移
	ch = fgetc(x);//g
	printf("%c\n", ch);
    fseek(x, -3, SEEK_CUR);
	ch = fgetc(x);//e
	printf("%c\n", ch);

	fclose(x);
	x = NULL;
}
代码分析:

这是文件里的内容,指向a的前面,读一次,打印a,偏移一位,一连读了四位,打印 a b

c d,现在指向d的后方,再从现在的位置向右偏移2,指向f的前面,读一个字符,打印出f,指向h的前面,再从现在的位置左移3,指向d的后面,读取一个空格字符;

运行结果:

ftell:

简要介绍:
long int ftell ( FILE * stream ); 返回的是文件指针相当于起始位置的偏移量;
代码举例:
int main()
{
	FILE* x = fopen("data.text", "r");
	int ch = fgetc(x);//一开始默认在开头 
	long int size = ftell(x);
	printf("%ld\n", size);
	ch = fgetc(x);
	size = ftell(x);
	printf("%ld\n", size);
	ch = fgetc(x);
	size = ftell(x);
	printf("%ld\n", size);
	ch = fgetc(x);
	size = ftell(x);
	printf("%ld\n", size);
	fseek(x, 2, SEEK_CUR);//2表示右移
	ch = fgetc(x);//g
	size = ftell(x);
	printf("%ld\n", size);
    fclose(x);
	x = NULL;
}
代码分析:

一开始偏移量是0,读一个字符偏移量加1,读完前四个字符,偏移量依次是1、2、3、4,再使用fseek将指针的位置往后偏移2,此时偏移量是6,再读一个字符,偏移量是7;

运行结果:

rewind

简要介绍:
void rewind ( FILE * stream ); 让文件指针的位置回到文件的起始位置;
代码举例:
int main()
{
	FILE* x = fopen("data.text", "r");
	int ch = fgetc(x);//一开始默认在开头 
	
	printf("%c\n", ch);
	rewind(x);
	ch = fgetc(x);//一开始默认在开头 

	printf("%c\n", ch);
	rewind(x);
	ch = fgetc(x);//一开始默认在开头 

	printf("%c\n", ch);
	rewind(x);
	ch = fgetc(x);//一开始默认在开头 

	printf("%c\n", ch);
	rewind(x);
	ch = fgetc(x);//一开始默认在开头 

	printf("%c\n", ch);
	rewind(x);
    fclose(x);
	x = NULL;
}
代码分析:

这是文件里的内容,打开文件,判断指针是否是空指针,不是的话,使用fgetc读取字符,读完一个打印,然后让指针回到起始位置,再读,再打印,再让指针回到起始位置,共循环五次;

运行结果:

5.文件结束判断;

用途:

用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束。
文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )

fgetc 判断是否为EOF 。

fgets 判断返回值是否为 NULL 。

二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
fread判断返回值是否小于实际要读的个数。

代码举例:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int c; // 注意:int,非char,要求处理EOF
	FILE* fp = fopen("test.txt", "r");
	if (!fp) {
		perror("File opening failed");
		return EXIT_FAILURE;
	}
	//fgetc 当读取失败的时候或者遇到文件结束的时候,都会返回EOF
	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取文件循环
	{
		putchar(c);
	}

		//判断是什么原因结束的
		if (ferror(fp))
			puts("I/O error when reading");
		else if (feof(fp))
			puts("End of file reached successfully");
	fclose(fp);
}

代码分析:

先打开文件,判断指针是否是空指针;如果不是,进入while循环,如果fgetc返回的不是EOF,打印出c;跳出循环,判断是什么原因,先判断是否输入输出时错误,属于读取失败结束;再判断读取结束的原因,如果返回不等于0的数说明到了文件尾结束;

运行结果:

6.文件缓冲区;

简要介绍:

ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。

代码举例:

#include <stdio.h>
#include <windows.h>
//VS2013 WIN10环境测试
int main()
{
 FILE*pf = fopen("temt.txt", "w");
 fputs("abcdef", pf);
 printf("睡眠10秒-已经写数据了,打开test.txt文件,发现文件没有内容\n");
 Sleep(10000);
 printf("刷新缓冲区\n");
 fflush(pf);
 printf("再睡眠10秒-此时,再次打开test.txt文件,文件有内容了\n");
 Sleep(10000);
 fclose(pf);
 pf = NULL;
 return 0;
}

代码分析:

先打开文件,放入字符串abcdef,此时文件里没有内容,睡眠,使用fflush时会刷新缓冲区,数据会传送,此时打开文件会有内容;fclose时也会刷新缓冲区;

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/552087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【智能排班系统】Quartz结合Cron-Utils自定义时间发送上班、休息提醒

文章目录 Quartz&#xff1a;强大的Java作业调度引擎Quartz概述核心概念与架构配置文件主配置&#xff08;配置主要调度器设置、事务&#xff09;线程池配置&#xff08;调整作业执行资源&#xff09;SimpleThreadPool特定属性自定义线程池 RAMJobStore配置&#xff08;在内存中…

人工智能揭示矩阵乘法的新可能性

人工智能揭示矩阵乘法的新可能性 数学家酷爱漂亮的谜题。当你尝试找到最有效的方法时&#xff0c;即使像乘法矩阵&#xff08;二维数字表&#xff09;这样抽象的东西也会感觉像玩一场游戏。这有点像尝试用尽可能少的步骤解开魔方——具有挑战性&#xff0c;但也很诱人。除了魔方…

基于GIS、python机器学习技术的地质灾害风险评价与信息化建库应用

结合项目实践案例和科研论文成果进行讲解。入门篇&#xff0c;ArcGIS软件的快速入门与GIS数据源的获取与理解&#xff1b;方法篇&#xff0c;致灾因子提取方法、灾害危险性因子分析指标体系的建立方法和灾害危险性评价模型构建方法&#xff1b;拓展篇&#xff0c;GIS在灾害重建…

IEDA 的各种常用插件汇总

目录 IEDA 的各种常用插件汇总1、 Alibaba Java Coding Guidelines2、Translation3、Rainbow Brackets4、MyBatisX5、MyBatis Log Free6、Lombok7、Gitee IEDA 的各种常用插件汇总 1、 Alibaba Java Coding Guidelines 作用&#xff1a;阿里巴巴代码规范检查插件&#xff0c;…

JavaScript之分时函数、分时间段渲染页面、提高用户体验、参数归一化、高阶函数、分段、appendChild、requestIdleCallback

MENU 前言效果图html原始写法优化方式一(参数归一化)优化方式二(当浏览器不支持requestIdleCallback方法的时候)优化方式三(判断环境) 前言 当前需要向页面插入十万个div元素&#xff0c;如果使用普通的渲染方式&#xff0c;会造成延迟。这时候就需要通过分时函数来实现渲染了。…

[element] 简单封装一个表格展示

简单封装 如果你想呈现一个表格,直接复制案例的话是这样的,圈出来的你需要写进入,麻烦 这时候把需要显示的列数据弄成一个对象数组, 给它列名和标题就行 记得这个prop和源数据的prop要对应!! const columns [{label: "日期",prop: date},{label: "姓名",…

【管理咨询宝藏72】MBB大型城投集团能源板块行业分析报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏72】MBB大型城投集团能源板块行业分析报告 【格式】PDF版本 【关键词】战略规划、商业分析、管理咨询、MBB顶级咨询公司 【强烈推荐】 这是一套…

通讯录的实现(顺序表)

前言&#xff1a;上篇文章我们讲解的顺序表以及顺序表的具体实现过程&#xff0c;那么我们的顺序表在实际应用中又有什么作用呢&#xff1f;今天我们就基于顺序表来实现一下通讯录。 目录 一.准备工作 二.通讯录的实现 1.通讯录的初始化 2.插入联系人 3.删除联系人 4.…

Arthas实战教程:定位Java应用CPU过高与线程死锁

引言 在Java应用开发中&#xff0c;我们可能会遇到CPU占用过高和线程死锁的问题。本文将介绍如何使用Arthas工具快速定位这些问题。 准备工作 首先&#xff0c;我们创建一个简单的Java应用&#xff0c;模拟CPU过高和线程死锁的情况。在这个示例中&#xff0c;我们将编写一个…

OpenHarmony C/C++三方库移植适配

简介 众所周知&#xff0c;C/C三方库相对与JS/ETS的三方组件来说&#xff0c;其运行效率高。那如何将一个C/C三方库移植到OH系统上呢&#xff1f;本文将介绍如何快速高效的移植一个C/C三方库到OpenHarmony上。 C/C三方库适配问题与解决方案 由上图可以看出&#xff0c;三方库…

Ypay源支付前端美化模板

功能&#xff1a; 首页加了运行时间&#xff0c;加了首页一言打字效果&#xff0c;加了访问次数&#xff0c;还有底部也适当的加了一点美化 而且加了一个播放器功能&#xff0c;可以自定义歌曲之类的 完美契合于源支付 直接上传主题包使用即可 演示图: 使用: 请不要在后台…

C语言学习笔记之指针(一)

目录 什么是指针&#xff1f; 指针和指针类型 指针的类型 指针类型的意义 指针-整数 指针的解引用 指针 - 指针 指针的关系运算 野指针 什么是野指针&#xff1f; 野指针的成因 如何规避野指针&#xff1f; 二级指针 什么是指针&#xff1f; 在介绍指针之前&#…

Ubuntu上安装Chrome浏览器

安装步骤 1.下载安装chrome安装包 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb2.安装Chrome浏览器 sudo dpkg -i google-chrome-stable_current_amd64.debsudo apt-get -f install3.启动Chrome浏览器 查看收藏夹里的Chrome图标 单击C…

LeetCode刷题总结 | 图论3—并查集

并查集理论基础 1.背景 首先要知道并查集可以解决什么问题呢&#xff1f; 并查集常用来解决连通性问题。大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判…

python怎么连接oracle

一&#xff1a;弄清版本&#xff0c;最重要&#xff01;&#xff01;&#xff01; 首先安装配置时&#xff0c;必须把握一个点&#xff0c;就是版本一致&#xff01;包括&#xff1a;系统版本&#xff0c;python版本&#xff0c;oracle客户端的版本&#xff0c;cx_Oracle的版本…

IAR 使用笔记(IAR BIN大小为0异常解决)

烧写 由于芯片的内部SPI FLASH的0级BOOT 程序起到到开启JTAG SW 仿真功能&#xff0c;一旦内部SPI FLASH存储的BL0启动代码被损坏&#xff0c;芯片的JTAG 将不能被连接。所以对BL0的烧写需要谨慎&#xff0c;烧写BL0过程保证芯片不断电。 如果烧写了多备份的启动代码&#xff…

深度学习架构(CNN、RNN、GAN、Transformers、编码器-解码器架构)的友好介绍。

一、说明 本博客旨在对涉及卷积神经网络 &#xff08;CNN&#xff09;、递归神经网络 &#xff08;RNN&#xff09;、生成对抗网络 &#xff08;GAN&#xff09;、转换器和编码器-解码器架构的深度学习架构进行友好介绍。让我们开始吧&#xff01;&#xff01; 二、卷积神经网络…

【Java探索之旅】掌握数组操作,轻松应对编程挑战

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、数组巩固练习1.1 数组转字符串1.2 数组拷贝1.3 求数组中的平均值1.4 查找数组中指…

手写签名功能(vue3)

手写签名功能&#xff08;vue3&#xff09; 效果 显示效果 签名版效果 代码 代码引入 写成子组件形式&#xff0c;直接引入即可 <signature-features />代码结构 signatureFeatures&#xff1a;签名的显示效果 vueEsign&#xff1a;画板 xnSignName&#xff1a;打开…

Ubuntu修改DNS

【永久修改DNS】 临时修改DNS的方法是在 /etc/resolv.conf 添加&#xff1a;nameserver 8.8.8.8 nameserver 8.8.8.8 注意到/etc/resolv.conf最上面有这么一行&#xff1a; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN 说明重启之后这个文件会被自动…