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

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

前言

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


相关文章
|
6月前
|
存储 C语言
【绝绝子】C语言字符串拷贝,小白必看的科普教程!
【绝绝子】C语言字符串拷贝,小白必看的科普教程!
|
6月前
|
程序员 编译器 C语言
最新Dev-C++下载安装以及C语言环境搭建教程(含C语言入门教程)
最新Dev-C++下载安装以及C语言环境搭建教程(含C语言入门教程)
837 0
|
1月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
1月前
|
编译器 C语言 C++
VSCode安装配置C语言(保姆级教程)
VSCode安装配置C语言(保姆级教程)
|
5月前
|
IDE 编译器 开发工具
C语言教程:如何进行环境搭建
C语言教程:如何进行环境搭建
|
5月前
|
存储 机器学习/深度学习 编译器
C语言基础简单教程
C语言基础简单教程
|
5月前
|
搜索推荐 编译器 C语言
C语言的简单教程
摘要: 了解C语言中的注释,包括//单行和/*多行*/注释,注意不要嵌套。使用快捷键Ctrl + K, Ctrl + C/U处理注释。C语言的关键字如&#39;int&#39;和&#39;return&#39;有特定含义,通常小写且高亮显示。常量是不可变的,分为不同类型。练习涉及识别不同类型的常量,如整型、实型和字符型。使用printf通过占位符输出常量,例如`printf(&quot;%d&quot;, 10)`。作业包括根据占位符输出个性化信息,如学校名字、高考分数和女朋友的详细信息,并掌握在不同情况下使用\n进行换行。
|
6月前
|
存储 算法 程序员
零基础C语言“函数”教程,有手就行
零基础C语言“函数”教程,有手就行
|
6月前
|
C语言
【用C语言轻松实现】- 扫雷【超详细教程】
【用C语言轻松实现】- 扫雷【超详细教程】
|
6月前
|
C语言
【用C语言轻松搞定】三子棋(超详细教程)
【用C语言轻松搞定】三子棋(超详细教程)