c语言:文件操作(2),认识各种文件操作函数

fgets

作用

fgets是C语言标准库中用于从文件中读取字符串的函数。

fgets函数从指定的文件流stream中读取最多n-1个字符,或者直到遇到换行符(包括换行符在内),并将其存储到以str指向的字符数组中。读取的字符串会以null字符\0结尾,因此fgets可以安全地读取包含空格的字符串。

如果成功读取了字符串,则fgets返回str;如果到达文件末尾或者发生错误,它会返回NULL

例如,可以使用fgets函数从文件中逐行读取文本数据,并将每行存储到相应的字符数组中。

格式

char *fgets(char *str, int n, FILE *stream);

用法

我们打开一个名为date.txt的文件,并使用fgets函数从中读取一行数据,然后将其打印到控制台上。fgets函数的第一个参数是目标缓冲区,第二个参数是要读取的最大字符数,第三个参数是文件指针。如果读取成功,fgets会返回一个非空指针,否则返回空指针。

#define  _CRT_SECURE_NO_WARNINGS

//fgets
#include<stdio.h>

int main()
{
	FILE* file;
	char buffer[100];//创建一个存储字符串的数组

	//打开文件
	file = fopen("date.txt", "r");
	if (file == NULL)
	{
		printf("无法打开文件\n");
		return 1;
	}
	//从文件中读取一行数据
	if (fgets(buffer, 100, file) != NULL)
	{
		printf("从文件中读取的内容是:%s", buffer);
	}
	else
	{
		printf("读取文件失败\n");
	}

	//关闭文件
	fclose(file);
	return 0;
}

我已经创建好了名为date.txt的文件名,并且写入了如下图的数据。 

运行结果: 


fputs 

作用

fputs是C语言标准库中用于向文件中写入字符串的函数。

fputs函数将以str指向的字符串写入到指定的文件流stream中。如果写入成功,fputs返回非负值;如果发生错误,它返回EOF

fprintffwrite等函数不同,fputs专门用于向文件中写入字符串,而不是格式化的数据或二进制数据。

例如,可以使用fputs函数将一个字符串写入到文件中,或者将一个字符串逐行写入到文件中。

格式

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

用法

示例中,我将date.txt中的数据拷入到date_copy.txt的文件中去。

#include<stdio.h>

int main()
{
	//声明两个指针变量,一个是源文件,一个是目标文件
	FILE* source_file, *target_file;
	char ch;

	//以只读的方式打开源文件date.txt
	source_file = fopen("date.txt", "r");
	if (source_file == NULL)
	{
		printf("无法打开源文件\n");
		return 1;
	}

	//以只写的方式打开目标文件date_copy.txt
	target_file = fopen("date_copy.txt", "w");
	if (target_file == NULL)
	{
		printf("无法打开目标文件\n");
		fclose(source_file);
		return 1;
	}

	//从源文件中读取数据,写入到目标文件中
	while ((ch = fgetc(source_file)) != EOF)
	{
		fputc(ch, target_file);
	}

	//关闭文件
	fclose(source_file);
	fclose(target_file);

	printf("文件拷贝完成\n");
	return 0;
}

运行结果:


fscanf

作用

fscanf是C语言标准库中用于从文件中按照指定格式读取数据的函数。

fscanf函数从指定的文件流stream中按照指定的格式字符串format读取数据,并将读取到的数据按照格式转换后存储到对应的变量中。fscanf函数的使用方式与scanf函数类似,只是scanf是从标准输入中读取数据,而fscanf是从文件中读取数据。

fscanf函数返回成功匹配并转换的参数个数,如果没有匹配成功,则返回0。如果发生读取错误或者到达文件末尾,则返回EOF

格式

int fscanf(FILE *stream, const char *format, ...);
fscanf函数从指定的文件流stream中按照指

用法

读取文件中的两个数字,我事先在input文件中放了两个数字68和6。

#include<stdio.h>

int main()
{
	FILE* file = fopen("input.txt", "r");
	if (file != NULL)
	{
		int num1, num2;
		if (fscanf(file, "%d %d", &num1, &num2) == 2)
		{
			printf("读取的两个整数分别是: %d 和 %d\n", num1, num2);
		}
		else
		{
			printf("读取文件时发生错误或者已达到文件末尾\n");
		}
		fclose(file);
	}
	else
	{
		printf("无法打开文件\n");
	}
	return 0;
}


fprintf

作用

fprintf是C语言标准库中用于向文件中按照指定格式写入数据的函数。

fprintf函数根据指定的格式字符串format将数据按照指定格式写入到指定的文件流stream中。与printf函数类似,fprintf函数可以接受可变数量的参数,根据format字符串中的格式说明符进行格式化输出。

fprintf函数返回成功写入的字符数,如果发生写入错误,则返回负值。

格式

int fprintf(FILE *stream, const char *format, ...);

用法

现在,我想要写入两个%d的数字到output的文件中去。

//fprintf
#include<stdio.h>
int main()
{
	FILE* file = fopen("output.txt", "w");
	if (file != NULL)
	{
		int num1 = 10, num2 = 20;
		if (fprintf(file, "两个整数分别是:%d 和%d \n", num1, num2) > 0)
		{
			printf("数据已经成功写入文件\n");
		}
		else
		{
			printf("写入文件时发生错误\n");
		}
		fclose(file);
	}
	else
	{
		printf("无法打开文件\n");
	}
	return 0;
}

运行完成后,我们可以看见两个数字已经写入。


sscanf

作用

sscanf是C语言标准库中用于从字符串中按照指定格式读取数据的函数。

sscanf函数从指定的字符串str中按照指定的格式字符串format读取数据,并将读取到的数据按照格式转换后存储到对应的变量中。sscanf函数的使用方式与scanf函数类似,只是scanf是从标准输入中读取数据,而sscanf是从字符串中读取数据。

sscanf函数返回成功匹配并转换的参数个数,如果没有匹配成功,则返回0。

格式

int sscanf(const char *str, const char *format, ...);

用法 

我现在要从字符串按照指定格式读取出三个不同类型的数据。

//sscanf
#include<stdio.h>
int main()
{
	char input[] = "35 54.3 hello";
	int num1;
	double num2;
	char str[10];
	// 从字符串中按照格式"%d %f %s"读取数据
	if (sscanf(input, "%d %lf %s", &num1, &num2, str) == 3)
	{
		printf("从字符串中读取的数据分别是:%d, %.2lf, %s\n", num1, num2, str);
	}
	else
	{
		printf("读取字符串时发生错误\n");
	}
	return 0;
}

运行结果


sprintf

作用

sprintf函数是C语言中的一个标准库函数,用于将格式化的数据写入字符串中。

sprintf函数的作用是根据指定的格式化字符串format,将后续的参数按照格式化要求写入到字符数组str中。它的使用方式与printf函数类似,不同之处在于printf函数将输出结果写入到标准输出流(通常是显示器),而sprintf函数将输出结果写入到指定的字符数组中。

格式

int sprintf(char *str, const char *format, ...);

用法

格式化数据

//sprintf
#include <stdio.h>

int main() 
{
    char buffer[100];
    int num = 123;
    double value = 45.67;
    char str[] = "hello";

    sprintf(buffer, "数字:%d, 浮点数:%.2lf, 字符串:%s", num, value, str);
    printf("格式化后的字符串:%s\n", buffer);

    return 0;
}

fseek

作用

fseek函数是C语言标准库中用于移动文件指针位置的函数,它允许程序在文件中定位到指定的位置,从而进行读取或写入操作。

格式

int fseek(FILE *stream, long offset, int origin);

用法

//fseek
#include <stdio.h>

int main() 
{
    FILE* fp = fopen("example.txt", "r");
    if (fp != NULL) 
    {
        fseek(fp, 10, SEEK_SET);  // 将文件指针移动到文件开头后的第10个字节处
        // 进行读取或写入操作
        fclose(fp);
    }
    else 
    {
        printf("打开文件失败\n");
    }
    return 0;
}

ftell

作用

ftell函数是C语言标准库中用于获取文件指针当前位置的函数。它返回当前文件位置指针的偏移量,以字节数表示。

格式

long int ftell(FILE *stream);

用法

读取字节数

#include <stdio.h>

int main() 
{
    FILE* fp = fopen("example.txt", "r");
    if (fp != NULL) 
    {
        fseek(fp, 0, SEEK_END);  // 将文件指针移动到文件末尾
        long int file_size = ftell(fp);  // 获取文件指针当前位置(即文件大小)
        printf("文件大小为 %ld 字节\n", file_size);
        fclose(fp);
    }
    else 
    {
        printf("打开文件失败\n");
    }
    return 0;
}


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

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

相关文章

模拟电路基础知识经典 200问,收藏这些就够了!

大家总说模电知识总是学不会&#xff0c;IC修真院为大家整理了模电经典200问&#xff0c;看看你掌握了多少&#xff0c;文末可以获取全部哦。 文末可领全部文档 1、半导体材料制作电子器件与传统的真空电子器件相比有什么特点? 答&#xff1a;频率特性好、体积小、功耗小&…

信息收集 - 谷歌hack

搜索引擎 FOFA网络空间测绘:https://fofa.info/ FOFA(FOcus on Assets)是一个网络空间搜索引擎,可以帮助用户快速定位和收集特定目标的信息。 ZoomEye:https://www.zoomeye.org ZoomEye 是一个网络空间搜索引擎,可以用于发现和收集特定目标的网络设备、Web应用程序、开放…

OpenCV-Python(18):图像梯度

目录 背景介绍及应用 学习目标 原理 Sobel算子和Scharr算子 Laplacian 算子 代码示例 重要提醒 背景介绍及应用 图像的梯度是指图像中每个像素点的强度变化情况。计算图像的梯度可以帮助我们了解图像中物体的边界和纹理等信息。梯度在计算机视觉和图像处理领域有着广泛…

【Amazon 实验③】Amazon WAF功能增强之追踪 Amazon WAF RequestID,排查误杀原因

文章目录 1. 方案介绍2. 架构图3. 操作演示 本实验将介绍如何利用 Amazon LambdaEdge&#xff0c;在 Amazon CloudFront 自定义错误页面 上展示每个由 Amazon WAF 返回的“403 Forbidden”错误的 Request ID。通过这个唯一的 WAF Request ID&#xff0c;网站运维工程师能够快速…

Swift 周报 第四十一期

文章目录 前言新闻和社区2024 年 Swift Student Challenge 公布现推出超过 30 个新的开发者活动 提案正在审查的提案 Swift论坛话题讨论推荐博文关于我们 前言 本期是 Swift 编辑组整理周报的第四十一期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#xff0c;欢…

不受父容器大小约束的TextView

序言 为了实现以下效果&#xff0c;特意开发了一个自定义控件。主要是红色的点赞数和评论数。 问题分析 自定义控件 该控件主要是在于忽略的父容器的大小限制&#xff0c;这样可以展示出全部内容。注意父容器的属性中需要下列配置。 package com.trs.myrb.view.count;impor…

[JS设计模式]Flyweight Pattern

Flyweight pattern 享元模式是一种结构化的设计模式&#xff0c;主要用于产生大量类似对象而内存又有限的场景。享元模式能节省内存。 假设一个国际化特大城市SZ&#xff1b;它有5个区&#xff0c;分别为nanshan、futian、luohu、baoan、longgang&#xff1b;每个区都有多个图…

Java 基础学习(十三)集合框架、List集合

1 集合框架 1.1 Collection 1.1.1 集合框架概述 Java 集合框架是一组实现了常见数据结构&#xff08;如列表、树集和哈希表等&#xff09;的类和接口&#xff0c;用于存储一组数据。 开发者在使用Java的集合类时&#xff0c;不必考虑数据结构和算法的具体实现细节&#xff…

使用selenium webdriver和mitmproxy代理模拟用户点击抓包(抓华为应用商城app数据)

文章目录 安装PythonMacWindows 安装程序需要的依赖安装chorm驱动编写代码自动化程序开始抓包 问题处理 本文简单记录一下使用selenium webdriver和mitmproxy代理模拟用户点击抓包的过程。 用于模拟真实的用户访问网站&#xff0c;达到抓包的目的。 作者水平有限&#xff0c;可…

深度解析自动化测试流程(纯干货)

今天就通过这篇文章给大家深度解析一下自动化测试的流程。 自动化测试的流程和功能测试其实挺相似的&#xff0c;整个流程也是按照需求分析及测试计划阶段、测试设计阶段、测试执行和测试总结阶段&#xff0c;总结下来就是下面一张图&#xff0c;ppt中纯手绘&#xff0c;效果不…

天猫数据分析(软件工具)-2023年11月天猫保健品行业分析报告:市场需求扩容,年轻人是主流群体

近年来&#xff0c;随着健康经济、颜值经济的兴起&#xff0c;越来越多的年轻人加入养生大军&#xff0c;成为保健食品市场上的一股新力量&#xff0c;带动市场扩容。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年11月份&#xff0c;天猫平台上保健食品的销量为24…

怎么提取视频中的背景音乐?

当我们在刷视频的时候&#xff0c;有时候听到一个背景音乐很好听&#xff0c;但是又不知道歌名&#xff0c;比如英语歌&#xff0c;这个时候我们很难找到这首歌&#xff0c;相信有很多朋友会遇到这样的问题&#xff0c;不知道怎么弄&#xff0c;下面小编给大家推荐一些方法帮助…

主流数据库体系结构

MySQL 我们通常所说的 MySQL 数据库服务器由一个实例&#xff08;instance&#xff09;以及一个数据库&#xff08;database&#xff09;组成。实例包括一组后台进程/线程和许多内存结构&#xff0c;用于管理数据库&#xff1b;数据库由一组磁盘文件组成&#xff0c;用于存储数…

【数论】欧拉函数

前置知识&#xff1a;分解质因数 一个数可以被分解为质因数乘积 n &#xff0c;其中的pi都是质因数 欧拉函数介绍 朴素法求欧拉函数 思路&#xff1a;边分解质因数边算欧拉函数 void get_primes() {int n; cin >> n;int ans 0;int res n;for (int i 2; i < n /…

docker部署个人网站项目记录(前后端分离)

背景 项目是前后端分离&#xff0c;前端有三部分&#xff0c;分别是 个人网站&#xff08;blog&#xff09;网站后台管理系统&#xff08;admin&#xff09;数据大屏&#xff08;datascreen&#xff09; 后端是基于nodejs写的后台服务 后台接口服务&#xff08;todo-nodejs…

表情识别-情感分析-人脸识别(代码+教程)

表情识别是计算机视觉领域中的一个重要研究方向&#xff0c;它的目标是通过分析人脸表情来判断人的情绪状态。表情识别在很多领域都有广泛的应用&#xff0c;如情感分析、人机交互、智能驾驶等。本文将从以下几个方面来阐述表情识别的相关内容。 一、表情识别的基本原理 表情识…

面试 Java 算法高频题五问五答第二期

面试 Java 算法高频题五问五答第二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 寻找峰值: 主要思想&#xff1a;二分查找&#xff0c;利用get函数&#xff0…

操作系统 day15(信号量)

信号量机制 之前学习了这些解决进程互斥的方案 *但它们都无法实现“让权等待”&#xff0c;于是Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法----信号量机制 总结&#xff1a;一个信号量对应一种资源。信号量的值这种资源的剩余数量&#xff08;信号量的值如果小于…

Python实现广义最小二乘法线性回归模型(GLS算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义最小二乘法&#xff08;Generalized Least Squares&#xff09;是一种回归分析方法&#xff0c;适…

NLP论文阅读记录 - | 文本生成的动量校准

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法3.1 神经文本生成3.2 动量校准 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 消融实验 五 总结 前言 Momentum Calibration for Text Generat…