温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言文件的顺序读写函数是什么

发布时间:2022-04-27 10:32:12 来源:亿速云 阅读:346 作者:iii 栏目:开发技术

C语言文件的顺序读写函数是什么

在C语言中,文件操作是非常重要的一部分。文件操作允许程序从文件中读取数据或将数据写入文件。文件操作可以分为顺序读写和随机读写两种方式。本文将详细介绍C语言中用于顺序读写的函数,并通过示例代码展示如何使用这些函数。

1. 文件操作的基本概念

在C语言中,文件操作通常涉及以下几个步骤:

  1. 打开文件:使用fopen()函数打开文件,并返回一个指向文件的指针。
  2. 读写文件:使用各种读写函数对文件进行读取或写入操作。
  3. 关闭文件:使用fclose()函数关闭文件,释放资源。

1.1 文件指针

在C语言中,文件操作是通过文件指针来进行的。文件指针是一个指向FILE结构体的指针,FILE结构体包含了文件的相关信息,如文件的位置、缓冲区等。

FILE *fp;

1.2 打开文件

使用fopen()函数打开文件,其原型如下:

FILE *fopen(const char *filename, const char *mode);
  • filename:要打开的文件名。
  • mode:打开文件的模式,常见的模式有:
    • "r":只读模式,文件必须存在。
    • "w":只写模式,如果文件存在则清空文件,如果文件不存在则创建文件。
    • "a":追加模式,如果文件存在则在文件末尾追加数据,如果文件不存在则创建文件。
    • "r+":读写模式,文件必须存在。
    • "w+":读写模式,如果文件存在则清空文件,如果文件不存在则创建文件。
    • "a+":读写模式,如果文件存在则在文件末尾追加数据,如果文件不存在则创建文件。

1.3 关闭文件

使用fclose()函数关闭文件,其原型如下:

int fclose(FILE *stream);
  • stream:要关闭的文件指针。

2. 顺序读写函数

顺序读写是指按照文件中数据的顺序依次读取或写入数据。C语言提供了多个函数用于顺序读写文件,下面将详细介绍这些函数。

2.1 fgetc()fputc()

2.1.1 fgetc()

fgetc()函数用于从文件中读取一个字符,其原型如下:

int fgetc(FILE *stream);
  • stream:要读取的文件指针。
  • 返回值:读取的字符,如果到达文件末尾或发生错误,则返回EOF

2.1.2 fputc()

fputc()函数用于向文件中写入一个字符,其原型如下:

int fputc(int c, FILE *stream);
  • c:要写入的字符。
  • stream:要写入的文件指针。
  • 返回值:写入的字符,如果发生错误则返回EOF

2.1.3 示例代码

#include <stdio.h>

int main() {
    FILE *fp;
    char ch;

    // 打开文件
    fp = fopen("test.txt", "w");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 写入字符
    fputc('H', fp);
    fputc('e', fp);
    fputc('l', fp);
    fputc('l', fp);
    fputc('o', fp);

    // 关闭文件
    fclose(fp);

    // 重新打开文件
    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 读取字符
    while ((ch = fgetc(fp)) != EOF) {
        printf("%c", ch);
    }

    // 关闭文件
    fclose(fp);

    return 0;
}

2.2 fgets()fputs()

2.2.1 fgets()

fgets()函数用于从文件中读取一行字符串,其原型如下:

char *fgets(char *str, int n, FILE *stream);
  • str:用于存储读取的字符串的缓冲区。
  • n:要读取的最大字符数(包括结尾的\0)。
  • stream:要读取的文件指针。
  • 返回值:读取的字符串,如果到达文件末尾或发生错误则返回NULL

2.2.2 fputs()

fputs()函数用于向文件中写入一个字符串,其原型如下:

int fputs(const char *str, FILE *stream);
  • str:要写入的字符串。
  • stream:要写入的文件指针。
  • 返回值:非负值表示成功,EOF表示失败。

2.2.3 示例代码

#include <stdio.h>

int main() {
    FILE *fp;
    char str[100];

    // 打开文件
    fp = fopen("test.txt", "w");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 写入字符串
    fputs("Hello, World!\n", fp);
    fputs("This is a test file.\n", fp);

    // 关闭文件
    fclose(fp);

    // 重新打开文件
    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 读取字符串
    while (fgets(str, 100, fp) != NULL) {
        printf("%s", str);
    }

    // 关闭文件
    fclose(fp);

    return 0;
}

2.3 fscanf()fprintf()

2.3.1 fscanf()

fscanf()函数用于从文件中格式化读取数据,其原型如下:

int fscanf(FILE *stream, const char *format, ...);
  • stream:要读取的文件指针。
  • format:格式化字符串,指定要读取的数据类型。
  • ...:可变参数列表,用于存储读取的数据。
  • 返回值:成功读取的数据项数,如果到达文件末尾或发生错误则返回EOF

2.3.2 fprintf()

fprintf()函数用于向文件中格式化写入数据,其原型如下:

int fprintf(FILE *stream, const char *format, ...);
  • stream:要写入的文件指针。
  • format:格式化字符串,指定要写入的数据类型。
  • ...:可变参数列表,包含要写入的数据。
  • 返回值:成功写入的字符数,如果发生错误则返回负值。

2.3.3 示例代码

#include <stdio.h>

int main() {
    FILE *fp;
    int num;
    float fnum;

    // 打开文件
    fp = fopen("test.txt", "w");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 写入格式化数据
    fprintf(fp, "%d %f\n", 10, 3.14);
    fprintf(fp, "%d %f\n", 20, 6.28);

    // 关闭文件
    fclose(fp);

    // 重新打开文件
    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 读取格式化数据
    while (fscanf(fp, "%d %f", &num, &fnum) != EOF) {
        printf("%d %f\n", num, fnum);
    }

    // 关闭文件
    fclose(fp);

    return 0;
}

2.4 fread()fwrite()

2.4.1 fread()

fread()函数用于从文件中读取二进制数据,其原型如下:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • ptr:用于存储读取数据的缓冲区。
  • size:每个数据项的大小(以字节为单位)。
  • nmemb:要读取的数据项数。
  • stream:要读取的文件指针。
  • 返回值:成功读取的数据项数,如果到达文件末尾或发生错误则返回小于nmemb的值。

2.4.2 fwrite()

fwrite()函数用于向文件中写入二进制数据,其原型如下:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
  • ptr:包含要写入数据的缓冲区。
  • size:每个数据项的大小(以字节为单位)。
  • nmemb:要写入的数据项数。
  • stream:要写入的文件指针。
  • 返回值:成功写入的数据项数,如果发生错误则返回小于nmemb的值。

2.4.3 示例代码

#include <stdio.h>

struct Student {
    char name[50];
    int age;
    float score;
};

int main() {
    FILE *fp;
    struct Student stu1 = {"Alice", 20, 95.5};
    struct Student stu2;

    // 打开文件
    fp = fopen("test.bin", "wb");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 写入二进制数据
    fwrite(&stu1, sizeof(struct Student), 1, fp);

    // 关闭文件
    fclose(fp);

    // 重新打开文件
    fp = fopen("test.bin", "rb");
    if (fp == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 读取二进制数据
    fread(&stu2, sizeof(struct Student), 1, fp);
    printf("Name: %s, Age: %d, Score: %.2f\n", stu2.name, stu2.age, stu2.score);

    // 关闭文件
    fclose(fp);

    return 0;
}

3. 总结

C语言提供了多种函数用于文件的顺序读写操作。通过这些函数,程序可以方便地从文件中读取数据或将数据写入文件。本文详细介绍了fgetc()fputc()fgets()fputs()fscanf()fprintf()fread()fwrite()等函数的使用方法,并通过示例代码展示了这些函数的实际应用。

在实际编程中,选择合适的文件读写函数可以大大提高程序的效率和可读性。希望本文能帮助读者更好地理解和掌握C语言中的文件操作。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI