文件的顺序读写

在读写之前,仍然要先用fopen打开文件

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输出流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输出流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
二进制输入 fread 文件
二进制输出 fwrite 文件

fputc:

函数原型:int fputc ( int character, FILE * stream );

返回值:成功时,返回写入的字符。 如果发生写入错误,则返回EOF并设置错误指示符(ferror)。

FILE* pf = fopen("F:\\DEV(C)\\test.txt", "w");
if (pf == NULL)
{perror("fopen");return 1;
}
//使用
fputc('a', pf);
fputc('b', pf);
fputc('c', pf);       //往test.txt文件中写入abc三个字符
//释放
fclose(pf);
pf = NULL;

fgetc:

函数原型:int fgetc ( FILE * stream );

返回值:成功时,返回读取的字符(提升为int值)。 返回类型为int,以适应表示失败的特殊值EOF;如果位置指示符在文件末尾,函数返回eof并设置流的EOF指示符(feof)。 如果发生其他读取错误,该函数也会返回EOF,但会设置其错误指示器(ferror)。

(函数在读取结束的时候会返回EOF;正常读取的时候,返回的是读取到的字符的ASCII码值)

FILE* pf1 = fopen("F:\\DEV(C)\\test.txt", "r");
if (pf1 == NULL)
{perror("fopen");return 1;
}
int ret = fgetc(pf1);  //从文件指针pf1指向的文件中读取字符,函数返回值是int类型
printf("%c", ret);

所有输出、输入流表示:无论是文件流,还是标准输入输出流都可以,如可以用fputc向标准输出流输出信息

fputc('b', stdout);        //stdout是标准输出流,该语句会将字符b通过控制台输出到屏幕上
int ret = fgetc(stdin); //从标准输入流(读取字符,函数返回值是int类型
printf("%c",ret);

fputs:

函数原型:int fputs ( const char * str, FILE * stream );

返回值:如果成功,将返回一个非负值。 出错时,该函数返回EOF并设置错误指示器(ferror)。

FILE* pf = fopen("F:\\DEV(C)\\test.txt", "w");
if (pf == NULL)
{perror("fopen");return 1;
}
fputs("abcdef\n", pf);
fputs("ghijkl\n", pf);        //往pf指向的文件写入字符串,想要换行效果需手动加上\n
fclose(pf);
pf = NULL;

fgets:

函数原型:char * fgets ( char * str, int num, FILE * stream );

str:指向一个字符数组的指针,读取的字符串被复制到这个数组中。

num:要复制到str中的最大字符数(包括终止空字符),例如要读取6个字符,只会读取5个,最后一个放\n

stream:指向标识输入流的文件对象的指针。 stdin可以用作从标准输入中读取的参数。

返回值:如果成功,该函数将返回str。 如果在试图读取字符时遇到文件结尾,则设置eof指示符(feof)。如果这发生在任何字符可以被读取之前,那么返回的指针是一个空指针(并且str的内容保持不变)。 如果发生读取错误,则设置错误指示符(ferror)并返回空指针(但str指向的内容可能已经改变)。

(函数在读取结束的时候会返回NULL;正常读取的时候,返回存放字符串的空间起始地址)

FILE* pf = fopen("F:\\DEV(C)\\test.txt", "r");
if (pf == NULL)
{perror("fopen");return 1;
}char arr[10] = {"xxxxxxxx"};
fgets(arr, 5, pf);      //假如文件内容是abcdef,则读取abcd\0放到arr数组中//释放
fclose(pf);
pf = NULL;

fprintf:

函数原型:int fprintf ( FILE * stream, const char * format, … );

printf的函数原型:int printf ( const char * format, … );

可看到fprintf函数比printf函数多了一个指向文件类型的指针,后续参数用法跟printf函数一样,…表示的参数是可变参数;表示把格式化数据写入到流中

返回值:如果成功,将返回写入的字符总数。 如果发生写入错误,将设置错误指示器(ferror ),并返回一个负数。 如果在写入宽字符时出现多字节字符编码错误,errno将设置为EILSEQ,并返回一个负数。

struct S
{int a;char arr[6];float b;
};struct S p = { 10,"abcde",5.0 };
FILE* pf = fopen("F:\\DEV(C)\\test.txt", "w");
if (pf == NULL)
{perror("fopen");return 1;
}
//使用fprintf写入结构体数据
fprintf(pf, "%d %s %f", p.a, p.arr, p.b);
//释放
fclose(pf);
pf = NULL;

fscanf:

函数原型:int fscanf ( FILE * stream, const char * format, … );

scanf的函数原型:int scanf ( const char * format, … );

所以fscanf也只是比scanf函数多了个指向文件类型的指针,加上就能用;表示从流中读取格式化内容到指定位置

返回值:如果成功,该函数将返回成功填充的参数列表的项数。由于匹配失败、读取错误或到达文件结尾,此计数可能与预期的项数匹配,也可能小于预期的项数(甚至为零)。 如果在读取时发生读取错误或到达文件结尾,则设置适当的指示器(feof或ferror)。并且,如果在成功读取任何数据之前发生任何一种情况,将返回EOF。 如果解释宽字符时出现编码错误,该函数将errno设置为EILSEQ。

struct S
{int a;char arr[6];float b;
};struct S p = { 0 };
FILE* pf = fopen("F:\\DEV(C)\\test.txt", "r");
if (pf == NULL)
{perror("fopen");return 1;
}
//使用fscanf以结构体形式读取文件,将pf指向的文件内容读取到结构体变量中
fscanf(pf, "%d %s %f", &(p.a), p.arr, &(p.b));
//再打印读取到的结构体内容到屏幕上
printf("%d %s %f", p.a, p.arr, p.b);
//释放
fclose(pf);
pf = NULL;

fwrite:

函数原型:size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

ptr:指向要写入的元素数组的指针,转换为const void*。即要将什么内容写到文件里

size:要写入的每个元素的字节大小。 size_t是一个无符号整型。

count:写入元素的数量,每个元素的大小为字节。

stream:指向指定输出流的文件对象的指针。即向哪个文件写入

返回值:返回成功写入的元素总数。 如果该数字与count参数不同,则是写错误导致函数无法完成。在这种情况下,将为该流设置错误指示器(ferror)。 如果size或count为零,则函数返回零,错误指示器保持不变。

struct S
{int a;char arr[6];float b;
};
struct S p = {10,"abcde",3.14f};
FILE* pf = fopen("F:\\DEV(C)\\test.txt", "w");
if (pf == NULL)
{perror("fopen");return 1;
}
//使用fwrite往文件中写入二进制内容,写入后文件内容看不懂的,是二进制形式
fwrite(&p,sizeof(struct S),1,pf);/*将结构体变量p,以二进制形式写入pf指针指向的文件里,写入数量为一个,大小是结构体的大小*/
//释放
fclose(pf);
pf = NULL;

fread:

函数原型:size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

ptr:指向至少(size * count)字节大小的内存块的指针,转换为void。即待读取文件的内容后放到哪里

size:要读取的每个元素的大小,以字节为单位。

count:读取元素的数量,每个元素的大小为字节。

stream:指向指定输入流的文件对象的指针。即向哪个文件读取。

返回值:返回成功读取的元素总数。 如果此数字与count参数不同,则可能是发生了读取错误,或者是在读取时到达了文件结尾。在这两种情况下,都会设置适当的指示器,可以分别使用ferror和feof进行检查。 如果size或count为零,函数返回零,流状态和ptr指向的内容保持不变。

(函数在读取的时候,返回的是实际读取到的完整元素的个数;如果发现读取到的完整的元素的个数小于指定的元素个数,这就是最后一次读取了。)

struct S
{int a;char arr[6];float b;
};
struct S p = {0};
FILE* pf = fopen("F:\\DEV(C)\\test.txt", "r");
if (pf == NULL)
{perror("fopen");return 1;
}
//使用fread向文件以二进制形式读取内容
fread(&p,sizeof(struct S),1,pf);/*将pf指向文件里的二进制内容读取到结构体变量p中,读取数量为一个,大小为结构体大小*/
//再将读取到的内容打印出来
printf("%d %s %f", p.a, p.arr, p.b);
//释放
fclose(pf);
pf = NULL;

C语言文件读写常用函数相关推荐

  1. C语言文件读写常用函数总结

    C语言文件读写常用函数总结 有点小头疼这几天复习,可是总是有些小可爱问有关C语言文件方面的内容,在此写篇博文一劳永逸. 目录 C语言文件读写常用函数总结 fopen函数 fclose函数 fseek函 ...

  2. C语言 文件读写 fputs 函数 - C语言零基础入门教程

    目录 一.fgets 函数简介 二.fgets 函数使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fgets 函数简介 fge ...

  3. C语言 文件读写 fputc 函数 - C语言零基础入门教程

    目录 一.fputc 函数简介 二.fputc 函数使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fputc 函数简介 fpu ...

  4. C语言 文件读写 fseek 函数 - C语言零基础入门教程

    目录 一.fseek 函数简介 二.fseek 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fseek 函数简介 fse ...

  5. C语言 文件读写 ferror 函数 - C语言零基础入门教程

    目录 一.ferror 函数简介 二.ferror 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.ferror 函数简介 ...

  6. c语言文件操作常用函数及读写文件代码举列

    文件操作常用函数 fopen() 打开流 fclose() 关闭流 fputc() 写一个字符到流中 fgetc() 从流中读一个字符 fseek() 在流中定位到指定的字符 fputs() 写字符串 ...

  7. C语言文件读写操作主要函数及其用例

    C语言把磁盘文件看成是字符(或字节)的序列,按照存储信息的形式来说,文件主要是有文本文件和二进制文件.文本文件由一个个字符组成,每个字节存放一个ASCII码制,代表一个字符.二进制文件把内存中的数据按 ...

  8. c语言文件写入函数有哪些,c语言文件读写函数有哪些?

    c语言文件读写函数有:"fgetc"和"fputc"(字符读写函数)."fgets"和"fputs"(字符串读写函数). ...

  9. C语言中文件读写方式r 的作用,C语言文件读写操作主要函数及其用例

    C语言把磁盘文件看成是字符(或字节)的序列,按照存储信息的形式来说,文件主要是有文本文件和二进制文件.文本文件由一个个字符组成,每个字节存放一个ASCII码制,代表一个字符.二进制文件把内存中的数据按 ...

  10. c语言创建一个文件函数,c语言文件读写函数 用C语言的函数创建、打开和读写文件...

    C语言文件读写结构体里面的数据怎样存到磁盘文件上 c语言对同一个文件进行读写(r+) 编写程序,将文本文件c.txt中的所有小写字母转换成相应的大写字母,其他一.标准文件的读写 1.文件的打开 fop ...

最新文章

  1. debian php 升级,Debian和ubuntu服务器升级PHP7
  2. Java取模函数,再不刷题就晚了!
  3. 开源压缩算法brotli_Brotli:一种新的压缩算法,可加快互联网速度
  4. 【华为云技术分享】云小课 | 购买的数据盘在服务器看不到?磁盘初始化很重要!
  5. 挑战10个最难的Java面试题(附答案)【下】
  6. 懒人修仙传ce修改方法_盘点《西游记》中增长寿命的6种方法,其中长生不老的方法有三种...
  7. win10开机出现两个系统
  8. 关于浏览器中copy, cut, paste捕获的总结
  9. 数据结构11——KMP
  10. linux内核源码版本查看
  11. python 怎么将数字转大写_python 数字转换为大写
  12. 【mmDetection框架解读】入门篇一、各组件解读,配置文件解读
  13. php ajax 域名查询,PHP+AJAX 实现域名查询系统
  14. Go语言开发第1课-环境搭建及简单程序入门
  15. 常用电子邮箱格式怎么写?哪个邮箱最安全最好用?
  16. 细说Dev c++的使用方法及常见问题
  17. manjaro折腾手记
  18. 云计算运营—01华为云计算解决方案介绍
  19. vuex简单入门:singer实例创建以及读写全过程
  20. 【Robomaster】电控入门手册

热门文章

  1. 智慧城管统计考评详解
  2. 如何用微pe+msdn进行纯净重装Windows系统
  3. rgb24转yuv420P
  4. TIF转PDF--itextpdf
  5. mega软件 linux,Linux系统下使用MegaCli软件对磁盘阵列进行操作
  6. redis 下载源地址
  7. 电子秤查看通道及更改通道方法
  8. 计算机二级c语言题型及考点,全国计算机二级C语言考试题型及考试重点.doc
  9. JavaSE实现汽车租赁系统
  10. wms仓库管理系统中条形码管理的两大优势