当前位置: 首页 > 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中的那些锁
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • github指令
  • Go 语言编译器的 //go: 详解
  • k8s如何管理Pod
  • leetcode386. Lexicographical Numbers
  • miaov-React 最佳入门
  • mysql常用命令汇总
  • vue:响应原理
  • 初探 Vue 生命周期和钩子函数
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端性能优化--懒加载和预加载
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 手写双向链表LinkedList的几个常用功能
  • 数据结构java版之冒泡排序及优化
  • 详解NodeJs流之一
  • 小李飞刀:SQL题目刷起来!
  • 译米田引理
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 阿里云移动端播放器高级功能介绍
  • ###项目技术发展史
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #pragma pack(1)
  • #QT(串口助手-界面)
  • ${factoryList }后面有空格不影响
  • (2)MFC+openGL单文档框架glFrame
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Google的Objective-C编码规范
  • ***监测系统的构建(chkrootkit )
  • .Net - 类的介绍
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法