C语言入门第十九篇,文件操作

2023-11-01

文件操作是通过c语言编程实现对文本文件的控制,比如读入文件内容、处理文件内容等等。相信很多学校的学生在学习的时候老师就会叫大家用c语言做一个学生的成绩管理系统或者是什么的系统,如果不涉及到数据库,那多半是用文件来做。我们这篇主要讲文件的读出,处理,存入文件等的方式。
基本语法和操作
文件的操作是通过文件指针来完成的,这里我不太想去纠结什么文件流啊或者什么的繁琐概念。我们先来看看语法,声明一个文件指针。

FILE *f; 

这时我们声明了一个f,接下来我们就要告诉这个文件指针指向那个地址。

f=fopen("test.txt","r");

我们用c语言内置的fopen函数,将本文件夹下面的test.txt文件打开(注:这里我讲本文件夹加粗的意思是如果在其他的地方一定要给出具体地址,例如c盘下program文件,就应该给出"C:\Program\test.txt"。如果没有给出具体地址则默认在本文件夹,这里涉及到一个相对地址和绝对地址的概念,感兴趣的人自己搜一下。)。我们看到fopen函数我们传入了两个值,前一个是文件的地址,后一个是打开的方式。
我们仔细讲一下打开的方式,其实打开方式大类有三种分别是,读(read),写(write),追加(a)。接着后面可以加一个b(binary)代表以二进制的方式打开。下面给出打开方式的详细介绍图。
文件操作打开方式说明
上面是详细的fopen第二个参数能够使用的参数,图片来自于百度知道fopen
当我们打开了这个文件我们就可以对他进行读出数据,写入数据等等的操作。下面我们介绍几个函数,了解了这几个函数基本的文件操作就没有问题了。
文件操作函数
为了避免太过于枯燥,我们通过一些例子来讲讲。我们需要从下面的这个文件中读出数字判断他是否为素数(文件中有从1到1000的数),如果是就写入另一个文件。
文件内容
fscanf
首先我们会用到的函数是fscanf,我们需要将文件中的数字全部读出来,然后再对他进行是否为素数的判断。我们来看看怎么读入这个文件里面的数据。

FILE *fp;
int a[1000];
int i=0; 
fp=fopen("2.txt","r");
while(!feof(fp))
{
	fscanf(fp,"%d",&a[i]);
	i++;
}

这里我们解释一下,feof()这个函数是否为文件结束,如果不是就返回0,所以在前面加入了一个!逻辑取反的符号,前面在操作符那张讲过。这句话的意思就是只要没到文件的结尾就不跳出循环。然后我们利用fscanf()读入文件fp,第二个参数的意思是读入的格式,这里是整数所以使用%d,和前面scanf的格式化输入一样,因为有一千个数所以我们前面声明了一个1000的数组,第三个参数就是这个数据的元素啦,每读入一个数就让i自加1。
fprintf
上面我们对文件中的数字进行了读取,并把它放入了一个数组中,我们可以对数组进行判定如果是就把它写入另一个素数文件中。fprintf给我们提供了写入文件的命令。

FILE *fp1;
fp1=fopen("3.txt"."w+");
fprintf(fp1,"%d ",a[i]);

这里我们声明了一个新的文件指针fp1,指向了一个命名为3.txt的文件,然后使用fprintf,讲a[i]中的值传入了文件。这里fprintf同样是3个参数,分别是文件指针,格式化输出(这里需要注意我在%d后面加入了一个空格,是因为我想每写入文件一个数,后面就有一个空格,大家可以学习一下这种操作。),需要传入的值。
讲了fscanf和fprintf,他其实和scanf和printf还是有相同的地方,就是格式化输出。所以大家要注意如果传入字符就要用%c,浮点数就要用%f或者%lf等等。
fread
这里我们再举一个例子来讲fread和fwrite。这两个函数通常是读写一些数据结构(如果深入了解其实很多格式,例如图片等等它具有自己的数据结构,哪几个字节存了什么东西是有标准的编码规定的),这里我们假设打开一个后缀名为.bmp的图片。我们科普一下bmp是windows下的标准图片文件格式,bmp图片的数据结构中,前两个字节是BM这两个字符。我们就利用程序,打开一个bmp的文件,然后输出图片的前两个字符。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *f;
	char a[10]={'\0'};
	f=fopen("1.bmp","r");
	fread(a,2,1,f);
	printf("%s\n",a);
} 

大家可以试一试这个程序,我们可以看到这一段程序,我们把1.bmp文件打开后,利用fread读出了前两个字符。这里我们可以看出fread的用法,第一个参数是接受读出的数据的,这里我们申明了一个字符串a,然后第二个参数是字节数。第三个是计数,意思我们读几个字节数出来,这里写的1表示读一个两字节出来,最后一个参数是我们文件指针。
这里说一下怎么建一个bmp的图片文件,直接在windows下新建一个画图保存的时候选择bmp文件就好了。
fwrite
再利用上面的例子,我们如果用写语音创建一个bmp文件时,第一步就是将BM这两个字符写在文件的前面。

FILE *f;
f=open("2.bmp","w+");
fwrite("BM",2,1,f);

有上面的fread作为基础,这个函数就很简单了,第一个参数是要写入的值,这里是BM字符。第二,三,四个参数和fread类似这里就不用再说了。

总结
本篇介绍C语言文件操作,介绍了一些简单的函数,对于文件的操作,这里仅仅是一个入门,例如fseek等等的函数都没有介绍。总的来说如果基础打的好的话,这篇并没有问题。

练习
1.试着写一个程序,讲上面例子说的文本中的数字读出来,然后再选出其中的素数的数字,写入另一个文本中。
2.试着写一个程序,读出BMP的数据结构,BMP的数据结构大家可以百度一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言入门第十九篇,文件操作 的相关文章

  • Java文件操作、IO流

    文章目录 1 File类1 1 File类概述和构造方法1 2 File类创建功能1 3 File类判断和获取功能1 4 File类删除功能 2 递归2 1 递归2 2 递归求阶乘2 3 递归遍历目录 3 IO流3 1 IO流概述和分类3
  • Hadoop之HDFS文件操作

    摘要 xff1a Hadoop之HDFS文件操作常有两种方式 xff0c 命令行方式和JavaAPI方式 本文介绍如何利用这两种方式对HDFS文件进行操作 关键词 xff1a HDFS文件 命令行 Java API HDFS是一种分布式文件
  • fprintf 输出矩阵到txt的方法

    a 61 1 2 3 4 5 6 是一个2 3矩阵 1 2 3 4 5 6 fid 61 fopen 39 d chr txt 39 39 wt 39 本命令用法网上可以查到 xff0c 帮助文件里讲的也很清楚 fprintf fid 39
  • Linux 文件系统调用 文件操作

    Linux 文件系统调用 文件操作 Linux 文件系统调用 文件操作 xff1a 12将a txt 内容拷贝到 b txt xff1a xff08 cp命令实现 mycp命令 xff09 找文件int fd 61 open 43 fork
  • C++ 文件操作

    需要了解的概念 数据流 缓冲区 Buffer 文件类型 文件存取方式 借助文件指针读写文件 需要理解的知识点包括 xff1a 数据流 缓冲区 文件类型 文件存取方式 1 1 数据流 xff1a 指程序与数据的交互是以流的形式进行的 进行C语
  • C#文件操作

    在前面操作变量和常量时这些值都是存放到内存中的 xff0c 当程序运行结束后使用的数据全部被删除 若需要长久保存应用程序中的数据 xff0c 可以选用文件或数据库来存储 文件通常存放到计算机磁盘上的指定位置 xff0c 可以是记事本 Wor
  • Golang 文件操作

    1 读文件 os Open name string file File err error os OpenFile name string flag int perm FileMode File error ioutil ReadFile
  • MATLAB中提高fwrite和fprintf函数的I/O性能

    提高 fwrite 和 fprintf 函数的 I O 性能 http www matlabsky com thread 34861 1 1 html 今天我们将讨论下著名的fwrite xff08 fprintf xff09 函数 xff
  • io流读写文件(文件内容修改)

    package cn sos psasps import java io BufferedReader import java io BufferedWriter import java io FileReader import java
  • shell编程范例之文件操作

    by falcon 2007 11 5 这一周我们来探讨文件操作 在日常学习和工作中 我们总是在不断的和各种文件打交道 这些文件包括普通的文本文件 可以执行的程序文件 带有控制字符的文 档 存放各种文件的目录文件 网络套接字文件 设备文件等
  • QT中的文件操作

    QT中的文件操作基于QFile类 1 打开文件 open bool open File fh QIODevice OpenMode mode QFileDevice FileHandleFlags handleflags DontClose
  • 自己动手写一个key value store

    一涉及到persistent 哪怕只是最基本的需求 很多人都会依赖数据库 或是其他现成的库或工具 确实 对于文件 大部分人很少直接打交道 或者只是诸如整体反序列化 序列化 按行读取 append new line等有限的操作 一个persi
  • C++ 修改/覆盖指定位置的文件内容或者从某个位置开始截断文件

    最新在进行文件方面的功能开发 遇到个这样的问题 1 文件读到中间 然后进行一些修改 2 然后将文件从修改后的地方截断 本以为这是个简单的操作 却花费了好大的功夫 网上并没有这样的例子 一通尝试 现在终于圆满解决了 特地记录一下 方便后来人
  • c语言入门----详解分支语句(if语句)

    文章目录 一 前言 二 顺序结构 三 为什么会有分支语句 四 if语句 五 if语句形式 1 if的基本形式 2 有关if的例子 3 有关if的易错提醒 六 if else语句 1 为什么会有if else语句 2 if else的基本形式
  • 详解“辗转相除法”(如何求最大公约数)

    本篇博客来讲一讲学习C语言过程中遇到的一种解法 辗转相除法 首先我会介绍辗转相除法的概念 然后会用一道例题进行运用 最后会进行总结 一 辗转相除法的概念 辗转相除法又称欧几里得算法辗转相除法 是指用于计算两个非负整数a b的最大公约数 应用
  • 三子棋【C语言实现】

    三子棋 让我们一起用C语言来玩一场三子棋的游戏吧 文章目录 三子棋 前言 一 基本步骤 二 具体实现 1 菜单界面 2 创建棋盘 3 棋盘初始化 4 打印棋盘 5 玩家落子 6 电脑落子 7 判断输赢 8 运行演示 1 玩家获胜 2 电脑获
  • qt中复制文件的功能

    1 利用qt来复制文件 首先新建个工程文件 拖入按钮 复制文件 2 需要引入的头文件如下 include
  • C语言入门之自定义结构体数据struct Student { int num; char name[20]; char sex; int age; 类型

    用户自己建立由不同类型数据组成的组合型的数据结构 它称为结构体 例如 一个学生的学号 姓名 性别 年龄 成绩 家庭地址等项 是属于同一个学生的 因此组成一个组合数据 如student 1的变量 反映它们之间的内在联系 struct Stud
  • C语言中的fprintf和printf区别在哪?

    原型 fprintf的函数原型为 int fprintf FILE stream const char format argument 而printf的函数原型为 int printf const char format argument
  • C语言一行一行读取文件

    C语言中 使用fgets函数可以一行行读du取文件 1 fgets函数 原型 char fgets char buf int bufsize FILE stream 功能 从文件结构体指针stream中读取数据 每次读取一行 说明 读取的数

随机推荐

  • 【2022第十届‘泰迪杯’挑战赛】A题:害虫识别完整版(大致思路。详细过程和代码以及结果csv在压缩包中)

    2022第十届 泰迪杯 挑战赛 A题 害虫识别完整版 已有完整结果 2022泰迪杯挑战赛A题害虫识别完整版 大致思路 详细过程和代码在压缩包中 正式数据 2022 04 06 正式数据 提取码 u54n 写在前面 完整版下载 建议Chrom
  • ios备忘录下载安卓版_ios8备忘录app软件下载

    ios8备忘录最新版是一款可以在手机上安装ios8专用备忘录的软件 可以快速记录事件 支持语音输入 还可以合并多个便签 超多样式可以自己选择 感受全新的记录体验 软件的功能众多 还可以设置定时提醒功能 快来试试吧 ios8备忘录软件介绍 你
  • Latex

    http www tablesgenerator com 表格神器 LibreDigitalLibrary github io 印度人搜集的教育资源 1 MCM The Mathematical Contest in Modeling ht
  • java创建以任意图片为背景的窗口

    swing自带的窗体是不能够满足我们的应用需求的 所以需要制作任意图片和形状的JFrame框体 比如下图 并且可以设置窗体背景图片的透明度 下面说明如何做到上图的效果 1 首先你得需要一张好看的图片 比如羊皮纸 但是这个下载的图片是方方正正
  • 处理中文乱码

    处理传输中文乱码 String shopProductName request getParameter shopProductName if org springframework util StringUtils isEmpty sho
  • 雷达手势识别技术概述

    前言 不必害怕未知 无需恐惧犯错 做一个Creator 目录 前言 雷达技术特点 毫米波雷达 实现过程 手势信号预处理 手势特征提取与分类识别算法 雷达技术特点 随着雷达技术的快速发展和广泛应用 雷达手势识别已成为人机交互技术领域的一个重要
  • LoadRunner解决动态验证码问题

    对于这个问题 通常我们可以采取以下三个途径来解决该问题 1 第一种方法 也是最容易想到的 在被测系统中暂时屏蔽验证功能 也就是说 临时修改应用 无论用户输入的是什么验证码 都认为是正确的 这种方法最容易实现 对测试结果也不会有太大的影响 当
  • Linux命令之sync

    概述 sync 命令可以强制将内存中的文件缓冲写入磁盘 更新块信息 在 linux unix 系统中 在文件或数据处理过程中一般先放到内存缓冲区中 等到适当的时候再写入磁盘 以提高系统的运行效率 这样虽然可以提高磁盘写入数据的效率 但是也带
  • STM32高级定时器中心对齐PWM模式,频率设置的分享

    有关STM32高级定时器中心对齐PWM输出的实验记录 计算PWM的频率公式 f PCLK2 TIM Prescaler 1 TIM Period 1 2 条件TIM ClockDivision 0 而不是f PCLK2 TIM Presca
  • 单链表的定义,插入与删除,查找,建立。

    链表分为 单链表 双链表 循环链表 静态链表 一 单链表的定义 在内存空间中 各个节点在逻辑上相邻 但在物理上不相邻 在单个的结点内部需要存放 数据域 和 指针域 存放指向下一个结点的指针 优点 不要求一大片连续空间 改变容量方便 缺点 不
  • InVideo AI:用人工智能轻松制作视频

    简介 InVideo AI 是一款在线视频制作工具 使用人工智能来帮助用户快速 轻松地制作高质量的视频 该工具提供多种功能 包括 链接 ai invideo io 仪表盘 历史记录 创建视频 选择模板 youtube explainer 加
  • 关于华硕飞行堡垒8笔记本网卡启动不了(Inter(R) Wi-Fi 6 AX201)该设备无法启动 代码10

    今天打开笔记本莫名奇妙的 连不上WIFI了 网线可以联网 查看设备管理器 网卡亮感叹号 查看详情 提示 该设备无法启动 代码10 代码10有三个情况 1 驱动不合 概率少 2 系统不合 小概率 3 坏了 大概率 解决方案也就是 1 重装网卡
  • proc文件系统下各参数解析

    文章目录 一 proc文件系统 1 1 proc pid 1 1 1 proc pid arch status 1 1 2 proc pid attr 1 1 2 1 proc pid attr current 1 1 2 2 proc p
  • 【华为OD机试真题2023B卷 JS】比赛的冠亚季军

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 比赛的冠亚季军 知识点数组编程基础链表分治 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 有N 3 lt N lt 10000 个运动员 他们的id为0到N 1 他们
  • 如何使用pandas读取csv文件中的某一列数据

    使用pandas读取csv文件中的某一列数据 可以这样做 先导入pandas模块 import pandas as pd 使用pd read csv函数读取csv文件 df pd read csv 文件名 csv 使用df 列名 读取某一列
  • 矩阵的转置(c++)

    将一个m n的二维数组的行和列元素互换 如下图所示 注 T代表转置 输入格式 输入矩阵的行和列数 用空格隔开 接下来输入矩阵的数据 1
  • Tomcat debug模式启动

    在 CATALINA HOME bin startup bat中添加以下任意一行配置 SET JAVA OPTS Xdebug Xrunjdwp transport dt socket address 8787 server y suspe
  • gitlab第一次上传项目

    1 git config global user name git的name 2 git config global user email git的邮箱 3 ssh keygen t rsa C git的邮箱 三次回车 会生成一个id rs
  • .torrent文件如何使用

    遇到 torrent文件 我们需要对应的下载软件 以迅雷为例打开后点击 新建 添加链接或口令 添加BT任务 选中已有 torrent文件即可下载 百度网盘的离线下载也可以进行 torrent文件的下载
  • C语言入门第十九篇,文件操作

    文件操作是通过c语言编程实现对文本文件的控制 比如读入文件内容 处理文件内容等等 相信很多学校的学生在学习的时候老师就会叫大家用c语言做一个学生的成绩管理系统或者是什么的系统 如果不涉及到数据库 那多半是用文件来做 我们这篇主要讲文件的读出