C语言基础教程(fgets和fputs)

news2024/10/4 23:40:24

文章目录

  • 前言
  • 一、fputs函数
  • 二、fgets函数
  • 三、fputc和fgetc函数
  • 总结


前言

本篇文章我们来讲解一下fgets和fputs函数,这两个函数通常用来作为输入和输出功能使用。

一、fputs函数

fputs函数是C语言标准库中的一个输出函数,用于将字符串写入到指定的文件中。它的原型如下:

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

fputs函数将字符串 str 写入到指定的文件流 stream 中。

参数说明:

str:要写入的字符串,以空字符 \0 结尾。
stream:指向要写入的文件流的指针,可以是文件也可以是标准输出 stdout。
fputs函数将字符串写入文件中,直到遇到空字符 \0 结束。它会返回以下两个值之一:

如果成功写入字符串,返回非负值。
如果发生错误,则返回 EOF(表示文件末尾)。
以下是一个示例代码,演示如何使用fputs函数将字符串写入文件:

#include <stdio.h>

int main(void) 
{
    FILE* file;
    errno_t err;
    char line[50];

    // 打开文件进行写操作
    err = fopen_s(&file, "example.txt", "w");
    if (err != 0) {
        printf("无法打开文件进行写操作。\n");
        return 1;
    }

    // 向文件中写入数据
    fputs("Hello, World!\n", file);
    fputs("This is an example.\n", file);
    fclose(file);

    return 0;
}

运行后字符成功被写入文件中:
在这里插入图片描述

将字符串写入stdout输出流中:

// 向文件中写入数据
fputs("Hello, World!\n", stdout);
fputs("This is an example.\n", stdout);

在这里插入图片描述

二、fgets函数

fgets 函数是C语言标准库中的一个输入函数,用于从文件中按行读取数据或从标准输入(键盘)读取数据。它的原型如下:

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

fgets 函数从指定的文件流(或标准输入流)中读取一行数据,并将其存储到指定的字符数组 str 中。它最多读取 num-1 个字符(包括换行符 \n),并在字符串末尾添加一个空字符 \0。

参数说明:

str:指向字符数组的指针,用于存储读取的数据。
num:要读取的最大字符数(包括换行符)。
stream:指向要从中读取数据的文件流指针,可以是文件也可以是标准输入 stdin。
fgets 函数按行读取数据,直到满足以下条件之一:

已读取了 num-1 个字符(包括换行符 \n),达到了最大字符数。
遇到换行符 \n,表示读取了一行数据。
读取到文件结尾(EOF)或发生错误。
fgets 函数返回一个指向字符串 str 的指针,即成功读取的数据的起始位置。如果无法读取数据或到达文件结尾,fgets函数将返回 NULL。

#include <stdio.h>

int main(void) 
{
    FILE* file;
    errno_t err;
    char line[50];

    // 打开文件进行写操作
    err = fopen_s(&file, "example.txt", "w");
    if (err != 0) {
        printf("无法打开文件进行写操作。\n");
        return 1;
    }

    // 向文件中写入数据
    fputs("Hello, World!\n", file);
    fputs("This is an example.\n", file);
    fclose(file);

    // 打开文件进行写操作
    err = fopen_s(&file, "example.txt", "r");
    if (err != 0) {
        printf("无法打开文件进行写操作。\n");
        return 1;
    }

    while ((NULL != fgets(line, 50, file)))
    {
        printf("buf : %s", line);
    }

    

    return 0;
}

运行结果:

在这里插入图片描述
注意:fgets函数读取完一行后将会覆盖之前读取到的数据,如果需要对读取到的数据进行处理的话,那么需要先把数据保存到其他数组当中。

使用fgets循环读取输入数据:

    while ((NULL != fgets(line, 50, stdin)))
    {
        printf("length : %d\n", strlen(line));
        printf("buf : %s", line);
    }

运行结果:
在这里插入图片描述

三、fputc和fgetc函数

当涉及读取和写入单个字符时,使用 fputc 和 fgetc 是常见的方法。这两个函数用于从文件中读取或写入单个字符。

fputc 函数:

函数原型: int fputc(int c, FILE *stream)
作用:将一个字符 c 写入到指定文件流 stream 中。
返回值:若成功则返回写入的字符 c,若发生错误则返回 EOF(-1)。

fgetc 函数:

函数原型: int fgetc(FILE *stream)
作用:从指定文件流 stream 中读取一个字符。
返回值:若成功则返回读取的字符,若发生错误或到达文件结尾则返回 EOF(-1)。

#include <stdio.h>

int main() {
   FILE *file;
   int ch;

   // 打开文件
   file = fopen("example.txt", "r");
   if (file == NULL) {
      printf("无法打开文件。\n");
      return 1;
   }

   // 使用 fgetc 逐字符读取文件内容并打印
   while ((ch = fgetc(file)) != EOF) {
      printf("%c", ch);
   }

   // 关闭文件
   fclose(file);

   return 0;
}

上述示例打开名为 example.txt 的文件,并使用 fgetc 函数逐字符读取文件内容,并通过 printf 函数打印到控制台。当到达文件结尾时,fgetc 函数将返回 EOF(-1),循环终止,文件关闭。

总结

本篇文章主要讲解了fgets和fputs的使用,这两个函数主要用于输入和输出使用,以及讲解了fputc和fgetc的使用。

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

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

相关文章

mysql主从同步怎么跳过错误

今天介绍两种mysql主从同步跳过错误的方法&#xff1a; 一、两种方法介绍 1、跳过指定数量的事务&#xff1a; mysql>slave stop; mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1 #跳过一个事务 mysql>slave start2、修改mysql的配置文件&#xff0c;通过slav…

The Sandbox 重新上线,带来全新体验!

在经历了一个充满史诗般新回忆的全力开局后&#xff0c;我们短暂休息了片刻&#xff0c;为玩家准备了全新的、惊心动魄的游戏活动。 我们已经完成了功能的微调&#xff0c;准备将您的游戏体验提升到一个全新高度&#xff01; 想知道我们正在做什么吗&#xff1f;现在还无法公开…

iTOP-STM32MP157开发板Linux Misc驱动-编译驱动程序

这里我们以 stm32mp157 开发板为例&#xff0c;将杂项设备驱动编译成模块&#xff0c;请参考本手册第三十七章 Linux 内核模块。我们将 misc.c 文件拷贝到 Ubuntu 的/home/nfs/03 目录下。将上次编译 helloworld 的 Makefile 文 件拷贝到 misc.c 同级目录下&#xff0c;修改 …

指针学习(特殊指针)

1.char型指针 char型指针实质上跟别的类型的指针并无本质区别&#xff0c;但是C语言中的字符串以字符数组的方式存储&#xff0c;而数组在大多数场合又会表现为指针&#xff0c;因此字符串在绝大多数场合就表现为char型指针。 例如&#xff1a; char *p "abcd"; …

axios的如何使用

1、axios的使用第一步先装包 npm i axios-S 2、axios的使用方法&#xff0c;先导入包&#xff0c;再绑定事件&#xff0c;再注册事件 3、axios如何实现post请求 4、Vue挂载axios,简便输入地址&#xff1a; 5、通过this实例&#xff0c;可以访问到axios的链接 6、给他改成$http…

【李宏毅 DLHLP 深度学习人类语言处理 HW1】

李宏毅 DLHLP 深度学习人类语言处理 HW1 相关资料HW1 语音小白在网上没有找到这门课的作业分享&#xff0c;那就记录一下自己的作业吧。 相关资料 课程官网&#xff1a;https://speech.ee.ntu.edu.tw/~hylee/dlhlp/2020-spring.php 作业github代码1&#xff1a;https://githu…

用抓包工具结合局域网代理技术爬取meituan某些商家的数据

众所周知&#xff0c;爬虫玩的好&#xff0c;牢饭吃的早&#xff08;如有侵犯利益&#xff0c;请您告知&#xff0c;我将立删&#xff01;&#xff09;。 其实抓包嘛&#xff0c;简单的H5网页直接就能用浏览器的开发者工具进行抓包&#xff0c;但是很多平台剔除了网页版&#…

《面试1v1》Kafka与传统消息系统区别

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

C语言:动态版本通讯录(静态版本的改进)

文章目录 一、改进方向1.结构2.初始化3.增加联系人and检查容量4.退出 二、代码实现总结 通讯录静态版本的实现思路与完整代码 一、改进方向 对于管理数据&#xff0c;我们主要进行增删查改操作&#xff0c;我们要改进静态版本的通讯录&#xff0c;主要在于增加数据方向。而删除…

C++数组、向量和列表的练习

运行代码&#xff1a; //C数组、向量和列表的练习 #include"std_lib_facilities.h"int main() try {int ii[10] { 0,1,2,3,4,5,6,7,8,9 };for (int i 0; i < 10; i)//把数组中的每个元素值加2ii[i] 2;vector<int>vv(10);for (int i 0; i < 10; i)vv…

Transformer模型简单介绍

Transformer是一个深度学习模型。主要功能通俗的来说就是翻译。输入&#xff0c;处理&#xff0c;输出。 https://zhuanlan.zhihu.com/p/338817680 大牛写的很完整 目录 总框架Encoder输入部分注意力机制前馈神经网络 Decoder 总框架 Encoders: 编码器Decoders: 解码器 Encoder…

AT指令介绍

一、基础知识 1、用途&#xff1a;用来控制TE&#xff08;TerminalEquipment&#xff09;和MT(Mobile Terminal)之间交互的规则&#xff0c;如下图所示。在GSM网络中&#xff0c;用户可以通过AT命令进行呼叫、短信、电话本、数据业务、传真等方面的控制。&#xff08;AT指令只…

BUG:pm2启动verdaccio报错:Invalid or unexpected toke

输入命令&#xff1a; pm2 state verdaccio 问题描述&#xff1a; pm2 logs verdaccio报错翻译&#xff1a;数据格式错误 导致我呢提原因&#xff0c;没有找到运行文件&#xff0c; 发现问题&#xff1a;因为命令默认查找verdaccio是去系统盘查找。 解决方式 1&#xff1a;…

探索单例模式:设计模式中的瑰宝

文章目录 常用的设计模式有以下几种&#xff1a;一.创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;二.结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;三.行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a;四.并发…

js逆向中高级案例-文章标题汇总

一、详细文章 点击链接查看如图案例标题

Tensorflow benchmark 实操指南

环境搭建篇见环境搭建-CentOS7下Nvidia Docker容器基于TensorFlow1.15测试GPU_东方狱兔的博客-CSDN博客 1. 下载Benchmarks源码 从 TensorFlow 的 Github 仓库上下载 TensorFlow Benchmarks&#xff0c;可以通过以下命令来下载 https://github.com/tensorflow/benchmarks 我…

LeetCode每日一题-接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…

宋版“三国演义”(北宋、辽、西夏和南宋、金、蒙古)

1 北宋、辽、西夏三国演义 宋、辽、西 夏鼎立形势图 公元960年&#xff08;后周显德七年&#xff09;&#xff0c;后周大将赵匡胤陈桥兵变黄袍加身&#xff0c;建立了宋朝。 然而&#xff0c;北方有一个资格比它老的国家&#xff0c;是为契丹人建立的辽国。 辽创立于五代初。…

《MySQL》第十一篇 SQL_MODEL模式简述

目录 一. 介绍与使用二. 模式类型三. 常用模式演示ANSI 模式TRADITIONAL 模式STRICT_TRANS_TABLES 模式 一. 介绍与使用 SQL Mode定义了MySQL应支持的SQL语法、数据校验等&#xff0c;这样可以更容易地在不同的环境中使用MySQL 常用来解决下面几类问题&#xff1a; 通过设置S…

ad+硬件每日学习十个知识点(14)23.7.25(以太网IC)

文章目录 1.什么是隔离电路&#xff0c;什么是隔离芯片&#xff1f;2.网线接口RJ45和RJ11的区别&#xff1f;&#xff08;我们用的电脑都是RJ45&#xff09;3.什么是rgmii协议&#xff1f;4.什么是以太网协议&#xff1f;5.以太网IC的连接方式6.以太网协议都包含哪些协议&#…