当前位置: 首页 > news >正文

IO--标准函数使用方法

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

注意点 

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

 1、IO的分类

  1. 文件IO
  2. 标准IO

 重点

1、标准IO函数

fopen    /    fclosefprintf    /    fscanffputc    /    fgetcfputs    /    fgetsfwrite    /    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 50int 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.txtwhile (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:指定要写入的文件,对应文件的流指针返回值:
成功,返回非负整数
失败,返回EOFchar *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:输出写入的文件返回值:
成功,返回写入的数据项数,不是字节数
失败,返回小于指定要写入的数据项数,或者返回0size_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函数,关于缓冲区只需要了解是一个存放待刷新数据的地方就可以了,否则会难以理解 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 外卖霸王餐项目是什么?怎么搭建属于自己的外卖霸王餐小程序 ?
  • PMP错题总结(八)
  • C3面:ASP.NET MVC 中还有哪些注释属性用来验证?
  • Mysql 集群技术
  • C语言进阶(一)数据在内存中的存储
  • 基于SpringBoot的酒店管理系统
  • 15天速通java基础:java(J2SE)阶段学习总结(数据类型、数组、方法、面向对象、异常处理、容器、流、多线程、网络编程)
  • 【Rust练习】10.元组
  • 普元EOS-利用热更新(热启动)提高开发效率
  • C高级编程 第九天(链表)
  • 回顾MVC
  • 关于 Vue/React 的 cli 中运用 webpack 打包的原理简单解析
  • 网络安全售前入门02——产品了解
  • es相关概念、索引操作(相当于mysql中的数据库操作)
  • 致远OA OCR票据识别组件
  • 【Linux系统编程】快速查找errno错误码信息
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • java8 Stream Pipelines 浅析
  • Node项目之评分系统(二)- 数据库设计
  • Python利用正则抓取网页内容保存到本地
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • vuex 笔记整理
  • 分布式事物理论与实践
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 搞机器学习要哪些技能
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 人脸识别最新开发经验demo
  • 如何学习JavaEE,项目又该如何做?
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 转载:[译] 内容加速黑科技趣谈
  • 如何用纯 CSS 创作一个货车 loader
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #1015 : KMP算法
  • #if #elif #endif
  • (10)ATF MMU转换表
  • (160)时序收敛--->(10)时序收敛十
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (26)4.7 字符函数和字符串函数
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (zhuan) 一些RL的文献(及笔记)
  • (二)linux使用docker容器运行mysql
  • (九)One-Wire总线-DS18B20
  • (四) 虚拟摄像头vivi体验
  • (四)js前端开发中设计模式之工厂方法模式
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bashrc在哪里,alias妙用
  • .NET Core 中的路径问题
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 的字符串暂存池
  • .net2005怎么读string形的xml,不是xml文件。
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET技术成长路线架构图
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48