fprintf()、fscanf()、fwrite()、fread()用法与区别

fprintf():按照指定的格式将数据输出到指定的文件流中。

fscanf():从指定的文件流中按照指定的格式读取数据。

fwrite():将指定的数据块写入指定的文件流中。

fread():从指定的文件流中读取指定数量的数据块。

  这些函数都是C语言标准库中的函数,用于文件的输入输出操作。其中,fprintf()和fscanf()的用法类似于printf()和scanf(),只是输出和输入的地方改成了文件流。而fwrite()和fread()则是直接对文件进行读写操作,可以读写二进制数据

区别:fprintf()、fscanf()是对文本文件的读写,fwrite()、fread()是对二进制文件的读写。

(1)fprintf():C语言库函数,用于将格式化的输出写入到指定的文件流中。它的定义如下:

int fprintf(FILE *stream, const char *format, ...);

其中:

  • stream:指向要写入的文件流的指针。(也就是文件指针)
  • format:字符串,包含输出格式说明符的格式化字符串。
  • ...:可变参数,是要输出的数据。

返回值:函数的返回值是成功写入的字符数,如果出现错误则返回负数。

#include"stdio.h"
int main(){
    FILE *fp;//定义文件指针
    char str[] = "这是一个测试文件。";
    int num = 1234;
    //打开文件,也就是创建一个叫test.txt的文件,并用文件指针fp指代
    //文件路径可改,是斜杠/,不是反斜杠\
    //fp = fopen("C:/Users/ASUS/Desktop/文件代码test/test.txt", "w");
    fp = fopen("test.txt", "w");
    //写入字符串,fprintf(写入指针,写入方式,写入内容)
    fprintf(fp,"%s\n", str);
    //写入整数
    fprintf(fp,"num = %d\n", num);
    fclose(fp);//打开必须关,不然会丢失数据,这个语句就是关闭文件的意思
    return 0;
}

(2)fscanf():C语言中的一个标准库函数,用于从文件中读取格式化数据。类似于scanf()函数,但是scanf()用于从标准输入设备(键盘)中读取数据,而fscanf()用于从文件中读取数据。读取从d第一行开始,如果设定的%的容量不够就可能只读了第一行。

int fscanf(FILE *stream, const char *format, ...);

参数说明:

  • stream:指向要读取的文件的指针。
  • format:格式控制字符串,用来指定读取数据的类型和格式。
  • ...:可变参数列表,用于保存读取的数据。

返回值:成功读取并匹配的输入项数,如果没有匹配到任何数据,则返回0,如果发生错误,则返回一个负数。

#include"stdio.h"
int main() {
    FILE *fp;//文件指针 
    char str[100];
    int num1, num2;
    //fp = fopen("C:/Users/ASUS/Desktop/文件代码test/input.txt", "r"); // 打开文件失败测试,之前没input.txt
	fp = fopen("C:/Users/ASUS/Desktop/文件代码test/test.txt", "r");
    if (fp == NULL) {
        printf("打开文件失败\n");
        return 1;
    }
    fscanf(fp, "%s %d %d", str, &num1, &num2); // 从文件中读取数据
    printf("从文件中读取到的数据:\n");
    printf("字符串:%s\n", str);
    printf("整数1:%d\n", num1);
    printf("整数2:%d\n", num2);
    fclose(fp); // 关闭文件
    return 0;
}

(3)fwrite():C语言标准库函数,在头文件<stdio.h>中定义。该函数用于向文件写入,不过是二进制文件,二进制文件.bin,不能直接打开就看到内容

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

参数说明:

  • ptr:要写入的数据的指针。
  • size:每个数据项的字节数。
  • count:要写入的数据项的个数。
  • stream:要写入的文件指针。

返回值:返回成功写入的数据项数目。如果函数返回0,意味着没有写入任何数据,可能是由于文件描述符出错或者写入出错。

#include"stdio.h"
int main(){
    int data[] = {1, 2, 3, 4, 5};
    FILE *fp;
    fp = fopen("C:/Users/ASUS/Desktop/文件代码test/file.bin", "wb");
    //fwrite(要写入的数据,写入大小,写入的数据总数(一个个写的,这里有12345,5个),文件指针)
    fwrite(data, sizeof(int), 5, fp);
    fclose(fp);
    return 0;
}

(4)fread():C语言中的一个函数,用于从二进制文件读取数据,返回的是项数。

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

参数说明:

  • ptr:指向读取数据存储的缓冲区。
  • size:每个数据项的字节数。
  • count:要读取的数据项数。
  • stream:文件指针,指向要读取数据的文件。

返回值:成功读取的数据项数

//#include <stdio.h>
//int main(){
//    int data[] = {1, 2, 3, 4, 5};
//    FILE *fp;
//    fp = fopen("C:/Users/ASUS/Desktop/文件代码test/file.bin", "wb");
//    fwrite(data, sizeof(int), 5, fp);
//    fclose(fp);
//    return 0;
//}
#include"stdio.h"
int main(){
    int data[5];
    FILE *fp;
    int i;
    fp = fopen("C:/Users/ASUS/Desktop/文件代码test/file.bin", "rb");
    if (fp == NULL){
        printf("Cannot open file.\n");
        return 1;
    }
    fread(data,sizeof(int),5,fp);
    for (i = 0; i < 5; i++){
        printf("%d ", data[i]);
    }
    fclose(fp);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是lethe先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值