【C语言】_文件内容操作:顺序读写

目录

常用函数

1. 字符输入、输出函数

2. 文本行输入、输出函数

3. 格式化输入、输出函数

4. 二进制输入、输出函数


常用函数

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

将文件内容读取到程序中为输入,将程序内容写入文件中为输出; 

1. 字符输入、输出函数

(1)字符输出函数 fputc:

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test1.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件-字符输出函数
	//写入字符a至z
	char ch = 'a';
	for (ch = 'a'; ch <= 'z'; ch++)
	{
		fputc(ch, pf);
	}
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

打开对应文件:

 (2)字符输入函数 fgetc:

 

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test1.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件-字符输入函数
	// 打印字符a至z
	int ch = 0;
	while ((ch = fgetc(pf)) != EOF)
	{
		printf("%c ", ch);
	}
	printf("\n");
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

输出结果为: 

2. 文本行输入、输出函数

 (1)文本行输出函数fputs:

int main()
{
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fputs("hello\n", pf);
	fputs("world\n", pf);
	//关闭文件
	fclose(pf);
	pf == NULL;
	return 0;
}

打开对应文件:

(2)文本行输入函数fgets:

int main()
{
	//打开文件
	char arr[256] = { 0 };
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件:一次读一行
	while (fgets(arr, 255, pf) != NULL)
	{
		printf("%s", arr);
	}
	//关闭文件
	fclose(pf);
	pf == NULL;
	return 0;
}

 输出结果为:

3. 格式化输入、输出函数

(1)格式化输出:

struct S
{
	char name[20];
	int age;
	double score;
};
int main()
{
	struct S s = { "张三", 20, 95.5 };
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test2.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	printf("%s %d %.1lf\n",s.name, s.age, s.score);  //输出在屏幕上
	fprintf(pf, "%s %d %.1lf", s.name, s.age, s.score);  //输出在文件里
	//关闭文件
	fclose(pf);
	pf == NULL;
	return 0;
}

输出结果与对应文件内容如下:

  

 (2)格式化输入函数fscanf:

struct S
{
	char name[20];
	int age;
	double score;
};
int main()
{
	struct S s = { 0 };
	//打开文件
	FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test2.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	fscanf(pf, "%s %d %lf", s.name, &(s.age), &(s.score));
	//数组名即数组首元素地址,无需再取地址
	printf("%s %d %.1lf\n", s.name, s.age, s.score);
	//关闭文件
	fclose(pf);
	pf == NULL;
	return 0;
}

输出结果为:

4. 二进制输入、输出函数

(1) 二进制输出函数fwrite:

struct S
{
	char name[20];
	int age;
	double score;
};
int main()
{
	struct S s = { "张三",20,93.5 };
	//打开文件
	FILE* pf = fopen( "E:\\C_文件操作\\C_文件操作\\test3.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//二进制方式写文件
	fwrite(&s, sizeof(struct S),1, pf);
	//关闭文件
	fclose(pf);
	pf == NULL;
	return 0;
}

打开对应文件:

(2) 二进制输入函数fread:

struct S
{
	char name[20];
	int age;
	double score;
};
int main()
{
	struct S s = { 0 };
	//打开文件
	FILE* pf = fopen( "E:\\C_文件操作\\C_文件操作\\test3.txt", "rb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//二进制方式读文件
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %.1lf\n", s.name, s.age, s.score);
	//关闭文件
	fclose(pf);
	pf == NULL;
	return 0;
}

输出结果为:

PS:(1)当一个C程序运行起来,标准输入流stdin,标准输出流stdout,标准错误流stderr是默认打开的。fgetc与fputc分别适用于所有输入流与输出流,故而除了读取与存储于文件操作外,还可以直接与键盘、屏幕交互:

int main()
{
	int ch = fgetc(stdin);
	fputc(ch, stdout);
	return 0;
}

 上文代码即可从键盘输入,从屏幕输出;

(2)对比scanf    fscanf  sscanf    与     printf fprintf sprintf 

其中sprintf函数的功能是把一个格式化的数据转换成字符串

sscanf函数的功能是把一个字符串转换成格式化数据

 sscanf 与 sprintf 函数示例:

struct S
{
	char name[20];
	int age;
	double score;
};
int main()
{
	char buffer[256] = { 0 };
	struct S s = { "张三", 20, 93.5 };
	struct S tmp = { 0 };
	sprintf(buffer, "%s %d %.1lf\n", s.name, s.age, s.score);
	//将结构体s保存在字符串buffer中

	printf("%s\n", buffer); 
	//以字符串形式打印

	sscanf(buffer,"%s %d %lf\n", tmp.name, &(tmp.age), &(tmp.score));
	//将字符串buffer转换为结构体数据

	printf("%s %d %.1lf", tmp.name, tmp.age, tmp.score);
	//格式化打印
	return 0;
}

输出结果为:

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

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

相关文章

材料物理 笔记-4

原内容请参考哈尔滨工业大学何飞教授&#xff1a;https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》&#xff08;哈尔滨工业大学出版社&#xff09; 离…

基于springboot+vue+Mysql的招生管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

RAID 0阵列扩容后的磁盘扩展操作

正文共&#xff1a;777 字 21 图&#xff0c;预估阅读时间&#xff1a;1 分钟 上次操作RAID 0的扩容&#xff08;如何操作RAID 0阵列的扩容&#xff1f;&#xff09;&#xff0c;因为耗时太长进度没有变化&#xff0c;就没再管它了。后来发现&#xff0c;右上角有一个“重新扫描…

Prometheus+grafana环境搭建方法及流程两种方式(docker和源码包)(一)

1.选型对比 最近项目上有对项目服务及中间件的监控需求&#xff0c;要做实现方案调研&#xff0c;总结一下自己的成果&#xff0c;目前业界主流可选的方案有&#xff1a; 国外开源&#xff1a; Prometheus&#xff1a;Prometheus - Monitoring system & time series dat…

C++——模板初阶

泛型编程 C语言中交换两个变量数据的内容一般是这样实现的 #include<iostream>using namespace std;void swap(int* x, int* y) {int tmp *x;*x *y;*y tmp; } int main() {int x 5;int y 7;swap(&x,&y);cout << "x" << x << …

基于栈结构的非递归二叉树结点关键字输出算法

基于栈结构的非递归二叉树结点关键字输出算法 一、引言二、二叉树基本概念三、非递归遍历算法基础四、算法设计五、算法实现六、C代码示例七、算法分析八、优化与讨论 一、引言 在计算机科学中&#xff0c;二叉树是一种重要的数据结构&#xff0c;它广泛应用于各种算法和数据结…

基于深度学习的条形码二维码检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于YOLOv8/v7/v6/v5的条形码二维码检测系统。核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行性能指标对比&#xff1b;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码&#xff0c;及基于Streamlit的交互…

前端优化gzip

gzip是GNUzip的缩写&#xff0c;是一种文件的压缩格式&#xff08;也可以说是若干种文件压缩程序&#xff09;&#xff0c;类似的压缩格式还有compress&#xff08;webpack&#xff09;&#xff0c;deflate等 主要用于组件的压缩 压缩的话主要分为两种&#xff0c; 服务器在…

记事本打开时总是会自动打开之前打开过的文件

记事本打开文件总是会自动打开之前打开过的文件_win11记事本关闭之后打开上一个还在-CSDN博客 感谢该博主&#xff0c;我一直以为是自己电脑的问题&#xff0c;不知道为什么要这么更新&#xff0c;影响我的很多文本内容消失。

我的领导马斯克:痛恨开会,不要非技术中层,推崇裁员

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 马斯克称得上是个“魔鬼老板”这事儿&#xff0c;已经出了名了。 现在&#xff0c;他的老部…

【面试八股总结】进程(一)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、什么是进程&#xff1f; 1. 基本概念 进程是具有独立功能的程序在一个数据集合上运行的过程&#xff0c;是系统进行资源分配和调度的一个独立单位。 2. 进程控制块 系统通过进程控制块PCB描述进程的进本情况…

leetcode代码记录(打家劫舍 II

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 一个专业的小偷&#xff0c;计划偷窃一个环形街道上沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是…

基于小程序实现的校园二手物品交易系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

openlayers 入门教程(九):overlay 篇

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

vulhub中Apache Solr RemoteStreaming 文件读取与SSRF漏洞复现

Apache Solr 是一个开源的搜索服务器。在Apache Solr未开启认证的情况下&#xff0c;攻击者可直接构造特定请求开启特定配置&#xff0c;并最终造成SSRF或任意文件读取。 访问http://your-ip:8983即可查看Apache Solr后台 1.访问http://your-ip:8983/solr/admin/cores?indexI…

Windows10安装CloudCompare(图文安装)

CloudCompare是一个3D点云&#xff08;和三角网格&#xff09;处理软件。它最初被设计用于在两个密集的3D点云&#xff08;例如用激光扫描仪获取的点云&#xff09;之间或点云和三角形网格之间进行比较。它依赖于专用于此任务的特定八叉树结构。 之后&#xff0c;它已经扩展到一…

使用 CloudDM 操作 PostgrgSQL 数据库

CloudDM 简介 CloudDM 是 ClouGence 公司推出的一款一站式数据库管理工具&#xff0c;使用它可以方便地访问和管理 MySQL、Oracle、PostgreSQL、阿里云 RDS、Greenplum、TiDB、Redis、StarRocks、Doris、SelectDB、SQL SERVER、ClickHouse、OceanBase 、PolarDB-X 、IBM Db2 等…

LearnOpenGL_part1

创建窗口 - LearnOpenGL CN (learnopengl-cn.github.io) 最原始的黑框框&#xff1a; #include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> int main() {glfwInit();//初始化GLFWglfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//配置G…

【JavaScript 漫游】【052】Proxy

文章简介 本篇文章为【JavaScript 漫游】专栏的第 052 篇文章&#xff0c;记录了 ES6 规范中 Proxy 的知识点。 概述 Proxy 用于修改某些操作的默认行为&#xff0c;等同于在语言层面做出修改&#xff0c;所以属于一种“元编程”&#xff08;meta programming&#xff09;&a…

C/C++程序的(编译,链接)翻译与运行

目录 前言&#xff1a; 1.程序环境 2.翻译环境 3.预处理&#xff08;预编译&#xff09; 4.编译 5.汇编 6.链接 7.运行环境 总结&#xff1a; 前言&#xff1a; 本篇来解释c/c程序的翻译环境与运行环境中的过程&#xff0c;不同的编程语言的翻译环境类似&#xff0c;…