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;
}