文件的打开关闭和顺序读写

news2024/11/25 14:36:14

目录

一、文件的打开与关闭

(一)文件指针

(二) 文件的打开和关闭

二、文件的顺序读写

 (一)fputc

1. 介绍

2. 举例

(二)fgetc

1. 介绍

2. 举例1

3. 举例2

(三) fputs

1. 介绍

2. 举例

(四)fgets

1. 介绍

2. 举例

(五)fprintf

1. 介绍

2. 举例

(六)fscanf

1. 介绍 

2. 举例

(七)区分scanf,printf;fscanf,fprintf;sscanf,sprintf


一、文件的打开与关闭

(一)文件指针

  • 缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”
  • 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名FILE
  • 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。
  • 一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
  • 下面我们可以创建一个FILE*的指针变量 
FILE* pf;//文件指针变量
  • 定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件

(二) 文件的打开和关闭

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
		

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

二、文件的顺序读写

功能函数名适用于
字符输入函数fgetc所有输入流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输入流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输入流
格式化输出函数fprintf所有输出流
二进制输入fread文件
二进制输出fwrite文件

 (一)fputc

1. 介绍

int fputc( int c, FILE *stream );

2. 举例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	
	//写文件---输出操作
	fputc('g', pf);
	fputc('h', pf);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

(二)fgetc

1. 介绍

int fgetc( FILE *stream );//读取错误或者读到文件末尾返回EOF
                          //读取正确返回字符的assic码值

2. 举例1

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	
	//读文件---输入操作
	int ch = 0;
	while ((ch=fgetc(pf))!=EOF)
	{
		printf("%c ", ch);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

3. 举例2

(三) fputs

1. 介绍

int fputs( const char *string, FILE *stream );

2. 举例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	
	//写文件---写一行
	fputs("qaz",pf);
	fputs("wsx", pf);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

(四)fgets

1. 介绍

2. 举例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	char arr[200] = "xxxx";
	//打开文件
	FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	

	//读文件---读一行
	fgets(arr, 3, pf);
	printf("%s", arr);
	/*while (fgets(arr, 199, pf) != NULL)
	{
		printf("%s", arr);
	}*/
	

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

(五)fprintf

1. 介绍

2. 举例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Stu
{
	char name[20];//姓名
	int age;//年龄
	double d;//分数
};
int main()
{
	struct Stu s = { "张三",19,78.6 };

	//打开文件
	FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//写文件
	fprintf(pf, "%s %d %lf", s.name, s.age, s.d);


	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

(六)fscanf

1. 介绍 

2. 举例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Stu
{
	char name[20];//姓名
	int age;//年龄
	double d;//分数
};
int main()
{
	struct Stu s = { "张三",19,78.6 };

	//打开文件
	FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//读文件
	//类比scanf("%s %d %lf", s.name, &(s.age), &(s.d));
	fscanf(pf,"%s %d %lf", s.name, &(s.age), &(s.d));
	printf("%s %d %lf", s.name, s.age, s.d);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

 

(七)区分scanf,printf;fscanf,fprintf;sscanf,sprintf

 

  • scanf:格式化的输入函数
  • printf:格式化的输出函数
  • fscanf:针对所有输入流的格式化的输入函数
  • fprintf:针对所有输出流的输出函数
  • sscanf:把一个字符串转换成格式化的数据
  • sprintf:把一个格式化的数据转换成字符串
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Stu
{
	char name[20];//姓名
	int age;//年龄
	double d;//分数
};
int main()
{
	struct Stu s = { "张三",21,47.7 };
	char buf[200] = { 0 };
	struct Stu tmp = { 0 };

	sprintf(buf, "%s %d %lf", s.name, s.age, s.d);
	printf("%s\n", buf);

	//从buf字符串中提取结构体数据
	sscanf(buf, "%s %d %lf", tmp.name, &(tmp.age), &(tmp.d));
	printf("%s %d %lf", tmp.name, tmp.age, tmp.d);
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

长尾关键词使用方法,通过什么方式挖掘长尾关键词?

当你在搜索引擎的搜索栏中输入有关如何使用长尾关键词的查询时&#xff0c;你可能希望有简单快捷的方式出现在搜索结果中&#xff0c;可以帮助你更好地应用seo。 不过&#xff0c;这里要记住一件事&#xff1a;SEO 策略只会为你的网站带来流量&#xff1b;在你的产品良好之前&a…

VS编译系统 实用调试技巧

目录什么是bug?调试是什么&#xff1f;有多重要&#xff1f;debug和release的介绍windows环境调试介绍、一些调试实例如何写出&#xff08;易于调试&#xff09;的代码编程常见的错误什么是bug?其实bug在英文翻译中有表示臭虫的含义&#xff0c;因为第一次被发现的导致计算机…

【Linux驱动开发100问】什么是模块?如何编写和使用模块?

&#x1f947;今日学习目标&#xff1a;什么是Linux内核&#xff1f; &#x1f935;‍♂️ 创作者&#xff1a;JamesBin ⏰预计时间&#xff1a;10分钟 &#x1f389;个人主页&#xff1a;嵌入式悦翔园个人主页 &#x1f341;专栏介绍&#xff1a;Linux驱动开发100问 什么是模块…

堆的基本存储

一、概念及其介绍堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆满足下列性质&#xff1a;堆中某个节点的值总是不大于或不小于其父节点的值。堆总是一棵完全二叉树。二、适用说明堆是利用完全二叉树的结构来维护一组数…

css 画图之质感盒子

前言 css 众所周知可以做很多的事情&#xff0c;比如&#xff1a;界面效果、特效、独特的样式等。今天给各位朋友带来的是以box-shadow来画一个很有质感效果的一个盒子。 之前在网上冲浪的时候&#xff0c;发现了这样的一个效果&#xff0c;所以来记录一下。 下面是实现后的…

Zookeeper源码环境搭建

前言 一、IEDA导入zk源码 git clone -b release-3.7.0 gitgithub.com:apache/zookeeper.git二、切换到稳定分支 通过命令行切换zk分支到3.8.1稳定版。 git checkout -b branch-3.8.1三、编译项目 执行maven命令编译项目 mvn clean install -Dmaven.test.skiptrue三、集群搭…

【计算机网络】高并发业务必备的Linux网络IO模型

IO的操作也就是应用程序从TCP缓冲区中读取数据的时候。网络I/O的本质是socket的读取&#xff0c;socket在linux中被抽象为流&#xff0c;I/O可以理解为对流的操作。对于一次I/O访问&#xff0c;数据会先被拷贝到操作系统的内核的缓冲区中&#xff0c;然后才会从操作系统内核的缓…

Java EE|TCP/IP协议栈之应用层协议DNS详解

文章目录一、对DNS的感性认识简介特点一些常见疑问二、DNSDNS域名结构域名的分级三、域名服务器四、域名解析过程参考一、对DNS的感性认识 简介 DNS&#xff0c;即Domain Name System,是域名系统的简称。它是Internet上解决网上机器命名的一种系统。 TCP/IP中的IP地址是由四…

C语言结构体对齐

1. 结构体对齐 要点 变量只能存储在他的长度的整数倍地址上结构体整体对齐跟他的最长的字段整数倍对齐 栗子1 struct Example1 {char a; //1个字节int c; //4个字节short b; //2个字节 };std::cout << sizeof(Example1 ) << std::endl; // 12 std::cout &…

JVM篇之垃圾回收

一.如何判断对象可以回收 1.引用计数法 只要一个对象被其他变量所引用&#xff0c;就让它的计数加1&#xff0c;被引用了两次就让它的计数变成2&#xff0c;当这个变量的计数变成0时&#xff0c;就可以被垃圾回收&#xff1b; 弊端&#xff1a;当出现如下图的情况&#xff0…

4.OCR文本识别Connectionist Temporal Classification(CTC)算法

文章目录1.基础介绍2.Connectionist Temporal Classification(CTC)算法2.1 什么是Temporal Classification2.2 CTC问题描述2.2关于对齐2.3 前向后向算法2.4 推理时3.pytorch中的CTCLOSS参考资料欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f3…

【react】react创建项目与引入AntD组件库:

文章目录一、初始化项目&#xff1a;【1】创建项目【2】暴露项目配置文件【3】安装依赖【4】配置less二、快捷键&#xff1a;【1】rcctab三、安装AntD组件库&#xff1a;【1】安装【2】index.js【3】问题&#xff1a;【4】效果&#xff1a;一、初始化项目&#xff1a; 【1】创…

【基于增强上下文注意网络:超分】

Enhanced Context Attention Network for Image Super Resolution &#xff08;基于增强上下文注意网络的图像超分辨率&#xff09; 深度卷积神经网络&#xff08;CNN&#xff09;极大地提高了图像超分辨率&#xff08;SR&#xff09;的性能。尽管图像随机共振的目标是恢复高频…

Mysql视图,存储过程,触发器,函数以及Mysql架构

一,视图视图是基于查询的一个虚拟表 , 也就是将sql语句封装起来, 要用的时候直接调用视图即可, select语句查询的表称为基表, 查询的结果集称为虚拟表, 基本表数据发生了改变, 那么视图也会发生改变, 使用视图就是为了简化查询语句.1.CREATE VIEW view_admin AS SELECT * FROM…

聊一聊过度设计!

文章目录什么是过度设计&#xff1f;过度设计的坏处如何避免过度设计充分理解问题本身保持简单小步快跑征求其他人的意见总结新手程序员在做设计时&#xff0c;因为缺乏经验&#xff0c;很容易写出欠设计的代码&#xff0c;但有一些经验的程序员&#xff0c;尤其是在刚学习过设…

top -p pid为什么超过100%

CPU&#xff1a;Cores, and Hyper-Threading 超线程&#xff08;Hyper-Threading &#xff09; 超线程是Intel最早提出一项技术&#xff0c;最早出现在2002年的Pentium4上。单个采用超线程的CPU对于操作系统来说就像有两个逻辑CPU&#xff0c;为此P4处理器需要多加入一个Logic…

Spring Cache的基本使用与分析

概述 使用 Spring Cache 可以极大的简化我们对数据的缓存&#xff0c;并且它封装了多种缓存&#xff0c;本文基于 redis 来说明。 基本使用 1、所需依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…

redis秒杀

redis优惠券秒杀 为什么订单表订单ID不采用自增长&#xff1f; id规律性太明显&#xff0c;容易被用户猜测到&#xff08;比如第一天下订单id10&#xff0c;第二天下订单id100&#xff0c;在昨天的1天内只卖出90商品&#xff09;受单表数据量限制&#xff08;订单数据量大&am…

Redis高级删除策略与数据淘汰

第二章&#xff1a;Redis高级 学习目标 目标1&#xff1a;能够说出redis中的数据删除策与略淘汰策略 目标2&#xff1a;能够说出主从复制的概念&#xff0c;工作流程以及场景问题及解决方案 目标3&#xff1a;能够说出哨兵的作用以及工作原理&#xff0c;以及如何启用哨兵 …

《分布式技术原理与算法解析》学习笔记Day23

分布式数据复制 我们在进行分布式数据存储设计时&#xff0c;通常会考虑对数据进行备份&#xff0c;以提高数据的可用性和可靠性&#xff0c;“数据复制技术”就是实现数据备份的关键技术。 什么是数据复制技术&#xff1f; 在分布式数据库系统中&#xff0c;通常会设置主备…