IO--标准函数使用方法

news2024/11/16 19:36:54

在学习这个知识点时,要清楚我们使用IO其实就是如何使用函数;

注意点 

  • 函数名
  • 函数参数之间的关系
  • 应用的场景,返回值
  • 缓冲区的概念

 1、IO的分类

  1. 文件IO
  2. 标准IO

 重点

1、标准IO函数

fopen    /    fclose

fprintf    /    fscanf

fputc    /    fgetc

fputs    /    fgets

fwrite    /    fread

 1.fprintf()的使用

//函数使用
#include<stdio.h>
#define MAX 50
int main(int argc, const char *argv[])
{
	char buf[MAX];
	scanf("%s",buf);
	FILE *fp=fopen("1.txt","w");
//定义一个文件指针指向打开的文件,fopen打开文件返回这个打开文件的地址,w是只写的意思,会先清空文件然后在把数据写入打开的文件
	fprintf(fp,"%s\n",buf);//这个函数的使用有三个参数,第一个参数是指向要写入的文件地址,第二个参数是写入的字符串格式,第三个参数是从程序的数组中当中写入,
	fclose(fp);//关闭文件
	return 0;
}

         1.错误使用:

//函数使用
#include<stdio.h>
#define MAX 50
int main(int argc, const char *argv[])
{
	char buf[MAX];
	scanf("%s",buf);
	FILE *fp=fopen("1.txt","w");
	FILE *fp1=fopen("2.txt","r");
	fprintf(fp,"%s\n",fp1);//第三个参数是一个文件指针,并不是传递数据的内容
	fclose(fp);
	fclose(fp1);
	return 0;
}



​

        2.实现将一个文件中的内容复制到另一个文件当中

#include <stdio.h>
#define MAX 50

int main(int argc, const char *argv[]) {
    char buf[MAX];
    
    // 打开文件 2.txt 进行读取
    FILE *fp1 = fopen("2.txt", "r");
    if (fp1 == NULL) {
        perror("Error opening file 2.txt");
        return 1;
    }
    
    // 打开文件 1.txt 进行写入
    FILE *fp = fopen("1.txt", "w");
    if (fp == NULL) {
        perror("Error opening file 1.txt");
        fclose(fp1);
        return 1;
    }
    
    // 从 2.txt 读取内容并写入到 1.txt
    while (fgets(buf, MAX, fp1) != NULL) //fgets()也是一个标准IO函数
    {
        fprintf(fp, "%s", buf);
    }
    
    // 关闭文件
    fclose(fp);
    fclose(fp1);
    
    return 0;
}

               需要记住,我们在使用fprintf()时,要注意参数,返回值,实现的功能,

fprintf()是将程序当中的数据,插入到文件当中,当然,我们之前使用printf()函数时,默认输出到终端是因为,终端也是一个文件。

        在liunx下面有三个默认终端文件-——(终端文件是指我们使用的终端,也是一个文件)

        1.stdin 标准输入 从终端文件输入到程序中

        2.stdout 标准输出 从程序中输出到终端文件

        3.stderr 标准错误输出 从程序中输出错误到终端文件,如果没错误,不输出

 2.fscanf()的使用       

#include<stdio.h>
#define MAX 50
int main(int argc, const char *argv[])
{
	char buf[MAX];
	FILE *fp=fopen("1.txt","r");//用一个文件指针指向打开的文件地址
	fscanf(fp,"%s\n",buf);//从上面打开的文件读取数据到buf这个字符数组当中
	puts(buf);//打印数组
	fclose(fp);//关闭文件和起到刷新缓冲区的作用
	return 0;
}

3.fgetc()和fputc()的使用

int fgetc(FILE *stream);
功能:从指定文件中获取单个字符
参数:
参数1: 
    FILE *stream:指定要从那个打开的文件中获取字符

返回值:
成功:返回获取到的字符ASCII
读取到文件末尾或失败,返回EOF
int fputc(int c, FILE *stream);
功能:向指定文件中输出单个字符

参数:
参数1:
    int c:指定要输出写入到文件中的字符( c & 0xff )
参数2:
    FILE *stream:流指针,表示打开的文件,要写入的文件
    
返回值:
成功,返回写入的字符
失败,返回EOF
#include<stdio.h>
int main(int argc, const char *argv[])
{
	char c;
	FILE *fp=fopen("1.txt","r");
	while(1)
	{
		c=fgetc(fp);//返回值是文件中的字符
		if(c==EOF)
		{
			break;
		}
		fputc(c,stdout);//将字符c的值输出到终端
	}
	fclose(fp);
	return 0;
}

4.fputs()和fgets()的使用

使用方法和上面的字符输入输出大致一样,只是这里读取的是字符串而已

int fputs(const char *s, FILE *stream);
功能:输出写入字符串(不包括'\0')到指定文件

从程序中输出字符串到文件

参数:
参数1:
    const char *s:字符串的首地址
参数2:
    FILE *stream:指定要写入的文件,对应文件的流指针
    
返回值:
成功,返回非负整数
失败,返回EOF


char *fgets(char *s, int size, FILE *stream);
功能:从指定文件中读取字符串 从文件中读取数据到程序当中
注意:fgets在读取时,会在读取的内容后自动补上一位'\0'字符,确保拿出来的数据是字符串


参数:
参数1:
    char *s:输入读取文件的内容存储的内存地址
参数2:
    int size:指定要获取的字符的个数,最多只能获取size-1个字符,在读取的末尾添加'\0'
    获取的大小:
    1、遇到 \n 就会停止本次读取,会获取到\n字符
    2、遇到 文件结尾,就会停止
    3、其他情况都读取size-1个字符
参数3:
    FILE *stream:要读取的文件
    
返回值:
成功,返回 s 的地址
文件读取完毕或者失败,返回NULL 
#include<stdio.h>

int main(int argc, const char *argv[])
{
	char buf[50];
	FILE *fp=fopen("1.txt","r");//打开文件
	while(1)
	{
		if(fgets(buf,3,fp)==NULL)//从文件中读取数据到程序
		{
			break;
		}
		puts(buf);从程序输出数据到文件,默认输出到终端文件
	}
	fclose(fp);//关闭文件

	return 0;
}

5.fread()和fwrite()的使用

 

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
 FILE *stream);
功能:将指定数据写入到指定文件中,由nmemb项数据组成,每项数据有size个字节,写入到文件

参数:
参数1:
    const void *ptr:要输出/写入到文件的数据的首地址,void * 可以表示任意类型的数据
参数2:
    size_t size:每项数据的大小    
参数3:
    size_t nmemb:共输出写入多少项数据
参数4:
    FILE *stream:输出写入的文件

返回值:
成功,返回写入的数据项数,不是字节数
失败,返回小于指定要写入的数据项数,或者返回0



size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取指定个数,指定大小的数据

参数:
参数1:
    void *ptr:指定将读取的数据存储的内存地址
参数2:
    size_t size:每个数据的大小
参数3:
    size_t nmemb:要读取多少个数据
参数4:
    FILE *stream:读取的文件
    
返回值:
成功,返回读取的数据个数,注意,在读取时,返回值的个数才表示具体读取到的个数
文件读取完毕或者失败,会返回小于指定大小的个数,或者等于0(已经在文件末尾,没有读取到任何数据)

 总结

本文主要重点讲了标准的IO函数,关于缓冲区只需要了解是一个存放待刷新数据的地方就可以了,否则会难以理解 

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

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

相关文章

如何使用Kdrill检测Windows内核中潜在的rootkit

关于Kdrill Kdrill是一款用于分析 Windows 64b 系统内核空间安全的工具&#xff0c;该工具基于纯Python 3开发&#xff0c;旨在帮助广大研究人员评估Windows内核是否受到了rootkit攻击。 需要注意的是&#xff0c;该项目与Python2/3兼容&#xff0c;无其他依赖组件&#xff0c…

女明星玩乙游,为何会推动国乙玩家“世纪大和解”?

“震惊&#xff01;叠姐和光姐竟然世纪大和解了。” 这件在国乙圈匪夷所思、想都不敢想的事&#xff0c;竟然在一位女明星的推动下发生了&#xff0c;也因此诞生了国乙圈的“8.22事件”。 事情的起因是女艺人乃万在社交平台上发布了乙游相关言论&#xff0c;引起了乙游玩家不…

SAP 有趣的‘bug‘ 选择屏幕输入框没了

如下代码将会输出一个P_U的字段 PARAMETERS p_u TYPE string VISIBLE LENGTH 12 MEMORY ID m1.AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN.IF screen-name P_U.screen-invisible 1.MODIFY SCREEN.ENDIF.ENDLOOP. 如果我们给这个字段设置一个默认值&#xff0c;参考如下代码…

8.26-docker创建容器+打包镜像+docker文件的学习

一、回顾 创建容器&#xff1a;docker run -it --name a1 centos:latest /bin/bash 查看容器&#xff1a;docker ps&#xff08;查看正在up的容器&#xff09; docker ps -a&#xff08;查看所有的容器&#xff09; 切回宿主机&#xff1a;ctrl p q 启动容器&#xff1a;d…

Furion+SqlSugar环境配置与项目创建

一、速通一图流 二、安装 .NET 8 1. 下载与安装 .NET 8 SDK 访问 .NET 下载页面 并下载最新版本的 .NET 8 SDK。根据操作系统选择适合的安装包&#xff08;如 Windows、macOS 或 Linux&#xff09;&#xff0c;并按照提示完成安装。 2. 验证安装 打开终端或命令提示符&…

SpringMVC - 第一个 SpringMVC 程序

MVC: 模块 视图 控制器 的简写&#xff0c;表示层 属于 C V&#xff0c;业务层和逻辑层属于 M SpringMVC 是对 web 使用的一套框架&#xff0c;可以更加快捷高效的管理 web应用 所有的请求都会经过 DispatcherServlet 这一个 Servlet 支持 IoC 和 AOP 统一处理请求 可以解析多…

找工作——行秋24届求职面试经验汇总

前言 求职记录&#xff1a;本人bg双9&#xff08;末流&#xff09;&#xff0c;共投岗位200&#xff0c;收到5个offer&#xff0c;求职方向偏向于国企&#xff0c;求职城市青睐新一线城市。个人求职记录 (qq.com)https://docs.qq.com/sheet/DSlBBVWRKZVZ5TWlD?tabBB08J2&…

C 06 编译4阶段

c语言编译的4个阶段&#xff1a;预处理、 编译、 汇编、 链接 预处理阶段会在源代码中查找预编译指令&#xff0c;其中主要是头文件展开&#xff08;include)&#xff0c;宏定义&#xff08;defind&#xff09;&#xff0c;选择性编译&#xff08;ifdef&#xff09;三种指令 预…

Claude 3.5 Sonnet引入了LaTeX公式渲染功能!!

终于&#xff0c;Claude 也引入了LaTeX公式渲染功能&#xff0c;消息一出&#xff0c;评论区的网友们热议不断。 【最新版】手把手Claude 3.5 Sonnet 详细步骤注册方法&#xff01;_claude 3.5 sonnet 注册 早在 ChatGPT 率先支持 LaTeX 语言用于输入和显示数学公式时&#xf…

[从0开始AIGC][LLM]:LLM中Encoder-Only or Decoder-Only?为什么主流LLM是Decoder-Only?

LLM中Encoder-Only or Decoder-Only & 为什么主流LLM是Decoder-Only&#xff1f; 文章目录 LLM中Encoder-Only or Decoder-Only & 为什么主流LLM是Decoder-Only&#xff1f;1. 什么是Encoder-only、Decoder-Only2. 为什么当前主流的LLM都是Decoder-only的架构低秩问题 …

欧瑞康oerlikon PECVD 系统 KAI MT R1.0 模块化 操作说明

欧瑞康oerlikon PECVD 系统 KAI MT R1.0 模块化 操作说明

HTML5手机端通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 文章信息界面1.3 文章列表界面1.4 双列文章列表界面1.5 通用标签界面1.6 联系我界面1.7 折叠框标签界面1.8 相关界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…

如何给笔记本或台式机顺利升级内存条

先查一下主板还有无剩下卡槽 win r 输入命令 taskmgr 调用后台查看 获取两个关键信息 速度 2666MHZ &#xff0c;卡槽 2/4 意味着还剩下两个空卡槽 接下来 用鲁大师纯净版查一下主板型号 鲁大师 v5.21.1300 绿色纯净版 - 果核剥壳 (ghxi.com) 查完之后&#xff0…

如何使用双重IP代理实现更安全的网络访问

在进行网络爬虫或其他需要隐匿真实IP的操作时&#xff0c;单一的代理IP有时并不能完全满足我们的需求。为了进一步提高安全性和隐私保护&#xff0c;我们可以使用双重IP代理。本文将详细介绍如何使用Java实现双重IP代理&#xff0c;帮助你在网络环境中更加游刃有余。 什么是双重…

TOMCAT “tom小猫”向你招手!!赶紧学起来!

一、WEB技术 1.1HTTP协议和B/S 结构 操作系统有进程子系统&#xff0c;使用多进程就可以充分利用硬件资源。进程中可以多个线程&#xff0c;每一个线程可以被CPU调度执行&#xff0c;这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提供计算服务。…

文件系统 -文件的基本了解

文章目录 一、文件的基本了解1. 文件 内容 属性2. 文件被访问之前&#xff0c;要被打开3. 谁在打开文件&#xff1f; 二、fopen()w 方式打开文件① 基本使用&#xff1a;② 标准重定向&#xff1a; a 方式打开文件① 基本使用&#xff1a;② 重定向&#xff1a; fopen&#x…

Runtime:源码解析Golang 的map实现原理

go version 1.15.6 map作为一种常见的 key-value 数据结构&#xff0c;不同语言的实现原理基本差不多。首先在系统里分配一段连接的内存地址作为数组&#xff0c;然后通过对map键进行hash算法(最终将键转换成了一个整型数字)定位到不同的桶bucket(数组的索引位置)&#xff0c;然…

【国产游戏行业的崛起与挑战:技术革新与全球市场机遇】

近年来&#xff0c;国产游戏行业确实取得了显著的发展&#xff0c;不仅在技术水平上不断提升&#xff0c;而且在国际市场上也崭露头角。然而&#xff0c;面对全球游戏市场的激烈竞争&#xff0c;国产游戏技术仍面临一些挑战和机遇。 首先&#xff0c;国产游戏在原创IP方面存在…

Autodesk系列软件批量激活工具出现许可证管理器版本不被支持问题解决方案!

使用Autodesk系列软件批量激活工具时&#xff0c;如果出现许可证管理器版本不被支持。 解决办法&#xff1a; 1、确定您安装的最高Autodesk软件版本。 例如&#xff0c;如果您同时安装了AutoCAD2020和Inventor 2022,那么您应该下载2022版对应的AdskLicensing。 说明&#xf…

汽车信息安全--攻破SecOC,就在今天!

目录 1.SecOC和系统安全&#xff1f; 2.破解实录 2.1 破解安全访问授权 2.2 程序控制的漏洞 3.小结 2020年左右&#xff0c;汽车信息安全开始在业内普及。 对于这种新概念&#xff0c;部分OEM仍采取以往开发模式&#xff0c;在不影响软件架构的大背景下&#xff0c;直接进…