前言

本篇文章我们来讲解一下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的使用。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐