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

(C语言)fgets与fputs函数详解

目录

1. fputs函数详解

1.1 向文件流输入数据

1.2 向标准输出流输出数据

2. fgets函数详解

2. 1 从文件流中得到数据

2.2 从标准输入流读取数据


1. fputs函数详解

头文件:stdio.h

函数有两个参数:str 与 stream

作用:写一串字符串到流当中,适用于所有输出流

书写成功返回非0值,若书写失败返回EOF

演示:

1.1 向文件流输入数据

#include <stdio.h>
int main()
{//打开文件FILE* pf = fopen("date.txt", "w");if (pf == NULL){perror("fopen");return 1;}//向文件写数据fputs("xxxxxx\n", pf);fputs("aaaaa", pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

运行后date.txt文件的内容

fputs会从文件开头向文件写数据,若不换行会一直在一行写数据。

1.2 向标准输出流输出数据

#include <stdio.h>
int main()
{char arr[] = "abcdefjhig";fputs(arr, stdout);return 0;
}

成功打印出数据,fputs同样是遇到字符串的\0就停止数据传输

2. fgets函数详解

头文件:stdio.h

有三个参数:str是字符串要写到地址,num是要从流中拿几个字符,stream是数据流,

作用:将stream中的num个字符写到str的地址中去,适用于所有输入流

输入成功返回:str。输入失败或遇到流的结尾返回:NULL

演示:

2. 1 从文件流中得到数据

#include <stdio.h>
int main()
{//打开文件FILE* pf = fopen("date.txt", "r");if (pf == NULL){perror("fopen");return 1;}//操作文件char arr[20] = { 0 };fgets(arr, 10, pf);for (int i = 0; i < 20; i++){fputc(arr[i], stdout);}//关闭文件fclose(pf);pf = NULL;return 0;
}

在上面的代码中fgets准备读取10个字符到arr中,但是我们可以看到date.txt文件中第一行只有'xxxxxx\n'共7个字符,fgets函数一次运行只会读取一行的数据,若一行不够要读取的数目,也不会再读取下一行,只是将这一行读取完。

若一行的字符数目大于要读取的数目,则会读取要读取的数目,下一次读取从上一次结束的地方开始读取,规则还是和上面说的一样。

若读到文件末尾或读取出现错误会返回NULL.

我们再来看一个示例(date.txt文件内容和上面一样):

#include <stdio.h>
int main()
{//打开文件FILE* pf = fopen("date.txt", "r");if (pf == NULL){perror("fopen");return 1;}//操作文件char arr[10] = { 0 };while (fgets(arr, 10, pf) != NULL){for (int i = 0; i < 10; i++){fputc(arr[i], stdout);}}//关闭文件fclose(pf);pf = NULL;return 0;
}

这样我们就将文件中的内容全都打印出来了。

2.2 从标准输入流读取数据

#include <stdio.h>
int main()
{char arr[10] = { 0 };fgets(arr, 10, stdin);return 0;
}

调试一下我们看一下    输入:fadsdsfafsdf

我们输入的数据数目大于10,但是我们可以看到arr结尾是\0,这是因为fgets会读取9个字符·在最后会自动添加\0因此我们在使用,并且fgets会读取空格这一点和scanf有很大不同,

感谢观看,欢迎在评论区讨论。

相关文章:

  • Phoenix伪分布安装
  • 剑指Offer题目笔记21(计数排序)
  • 【Win】使用PowerShell和Webhooks轻松发送消息至Microsoft Teams
  • 【Java常用的API】JDK8相关时间类
  • linux离线安装maven
  • P1629 邮递员送信
  • 蓝桥杯 本质上升序列
  • 2024批量下载微博内容点赞转发评论数等数据,词云分析微博数据
  • 【动手学深度学习-pytorch】9.2长短期记忆网络(LSTM)
  • K8S的mountPath和subPath
  • LeetCode 206.反转链表
  • 如何在智能交通系统中使用物联网技术提高道路安全和效率
  • 怎么让ChatGPT批量写作原创文章
  • Springboot+MybatisPlus+EasyExcel实现文件导入数据
  • Mysql中的那些锁
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java正则表式的使用
  • jQuery(一)
  • Js基础——数据类型之Null和Undefined
  • Node 版本管理
  • Python学习笔记 字符串拼接
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 初识 webpack
  • 基于webpack 的 vue 多页架构
  • 面试总结JavaScript篇
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何设计一个比特币钱包服务
  • 使用Gradle第一次构建Java程序
  • 我看到的前端
  • 小程序01:wepy框架整合iview webapp UI
  • elasticsearch-head插件安装
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (接口自动化)Python3操作MySQL数据库
  • (五)Python 垃圾回收机制
  • .NET Core 版本不支持的问题
  • .net mvc部分视图
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net开发时的诡异问题,button的onclick事件无效
  • [ solr入门 ] - 利用solrJ进行检索
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BJDCTF2020]The mystery of ip1
  • [C#] 如何调用Python脚本程序
  • [C++进阶篇]STL中vector的使用
  • [Docker]五.Docker中Dockerfile详解
  • [Eclipse] 详细设置护眼背景色和字体颜色并导出
  • [Java]快速入门二叉树,手撕相关面试题
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • [LeetCode] Merge Two Sorted Lists