在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块)。本节介绍以字符形式读写文件。

以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符。主要使用两个函数,分别是 fgetc()fputc()
字符读取函数 fgetc
fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符。fgetc() 的用法为:

int fgetc (FILE *fp);

fp 为文件指针。fgetc() 读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回EOF。

EOF 是 end of file 的缩写,表示文件末尾,是在 stdio.h 中定义的宏,它的值是一个负数,往往是 -1。fgetc() 的返回值类型之所以为 int,就是为了容纳这个负数(char不能是负数)

EOF 不绝对是 -1,也可以是其他负数,这要看编译器的实现。

fgetc() 的用法举例:

char ch;
FILE *fp = fopen("D:\\demo.txt", "r+");
ch = fgetc(fp);

表示从D:\demo.txt文件中读取一个字符,并保存到变量 ch 中。
在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在文件打开时,该指针总是指向文件的第一个字节。使用 fgetc() 函数后,该指针会向后移动一个字节,所以可以连续多次使用 fgetc() 读取多个字符。

注意:这个文件内部的位置指针与C语言中的指针不是一回事。位置指针仅仅是一个标志,表示文件读写到的位置,也就是读写到第几个字节,它不表示地址。文件每读写一次,位置指针就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对用户是隐藏的。
【示例】在屏幕上显示 D:\demo.txt 文件的内容。

#include<stdio.h>
int main(){FILE *fp;char ch;//如果文件不存在,给出提示并退出if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){puts("Fail to open file!");exit(0);}//每次读取一个字节,直到读取完毕while( (ch=fgetc(fp)) != EOF ){putchar(ch);}putchar('\n');  //输出换行符fclose(fp);return 0;
}

在D盘下创建 demo.txt 文件,输入任意内容并保存,运行程序,就会看到刚才输入的内容全部都显示在屏幕上。

该程序的功能是从文件中逐个读取字符,在屏幕上显示,直到读取完毕。

程序第 13 行是关键,while 循环的条件为(ch=fgetc(fp)) != EOF。fget() 每次从位置指针所在的位置读取一个字符,并保存到变量 ch,位置指针向后移动一个字节。当文件指针移动到文件末尾时,fget() 就无法读取字符了,于是返回 EOF,表示文件读取结束了
对 EOF 的说明
EOF 本来表示文件末尾,意味着读取结束,但是很多函数在读取出错时也返回 EOF,那么当返回 EOF 时,到底是文件读取完毕了还是读取出错了?我们可以借助 stdio.h 中的两个函数来判断,分别是 feof()ferror()
feof() 函数用来判断文件内部指针是否指向了文件末尾,它的原型是:

int feof ( FILE * fp );

当指向文件末尾时返回非零值,否则返回零值。
ferror() 函数用来判断文件操作是否出错,它的原型是:

int ferror ( FILE *fp );

出错时返回非零值,否则返回零值。
需要说明的是,文件出错是非常少见的情况,上面的示例基本能够保证将文件内的数据读取完毕。如果追求完美,也可以加上判断并给出提示:

#include<stdio.h>
int main(){FILE *fp;char ch;//如果文件不存在,给出提示并退出if( (fp=fopen("D:\\demo.txt","rt")) == NULL ){puts("Fail to open file!");exit(0);}//每次读取一个字节,直到读取完毕while( (ch=fgetc(fp)) != EOF ){putchar(ch);}putchar('\n');  //输出换行符if(ferror(fp)){puts("读取出错");}else{puts("读取成功");}fclose(fp);return 0;
}

这样,不管是出错还是正常读取,都能够做到心中有数。
字符写入函数 fputc
fputc 是 file output char 的所以,意思是向指定的文件中写入一个字符。fputc() 的用法为:

int fputc ( int ch, FILE *fp );

ch 为要写入的字符,fp 为文件指针。fputc() 写入成功时返回写入的字符,失败时返回 EOF,返回值类型为 int 也是为了容纳这个负数。例如:

int fputc ( int ch, FILE *fp );

ch 为要写入的字符,fp 为文件指针。fputc() 写入成功时返回写入的字符,失败时返回 EOF,返回值类型为 int 也是为了容纳这个负数。例如:

fputc('a', fp);

char ch = 'a';
fputc(ch, fp);

表示把字符 ‘a’ 写入fp所指向的文件中。
两点说明

  1. 被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,并将写入的字符放在文件开头。如需保留原有文件内容,并把写入的字符放在文件末尾,就必须以追加方式打开文件。不管以何种方式打开,被写入的文件若不存在时则创建该文件。

  2. 每写入一个字符,文件内部位置指针向后移动一个字节。

【示例】从键盘输入一行字符,写入文件。

#include<stdio.h>
int main(){FILE *fp;char ch;//判断文件是否成功打开if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){puts("Fail to open file!");exit(0);}printf("Input a string:\n");//每次从键盘读取一个字符并写入文件while ( (ch=getchar()) != '\n' ){fputc(ch,fp);}fclose(fp);return 0;
}

运行程序,输入一行字符并按回车键结束,打开D盘下的 demo.txt 文件,就可以看到刚才输入的内容。

程序每次从键盘读取一个字符并写入文件,直到按下回车键,while 条件不成立,结束读取。

C语言fgetc和fputc函数用法详解(以字符形式读写文件)相关推荐

  1. c语言fputc输入字符串,C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    C语言fgetc和fputc函数用法详解(以字符形式读写文件),文件,字符,指针,函数,字节 C语言fgetc和fputc函数用法详解(以字符形式读写文件) 易采站长站,站长之家为您整理了C语言fge ...

  2. 计算机科学类专升本复习之“C语言fgetc和fputc函数用法”详解(初稿)

    C语言fgetc和fputc函数用法详解(以字符形式读写文件) 在C语言中,"读写"文件比较灵活,既可以每次"读写一个字符",也可以"读写一个字符串& ...

  3. matlab fgetc,C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件 ...

  4. C语言fgetc和fputc函数用法详解

    以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符.主要使用两个函数,分别是 fgetc() 和 fputc(). 字符读取函数 fgetc fgetc 是 file get ...

  5. C语言fgetc和fputc函数用法讲解

    在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件 ...

  6. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

  7. C语言atof,atoi,atol函数用法详解和main函数2个参数的使用详解

    #include <stdlib.h> 三个都是这个库里面的函数 atof()函数用于将字符串转换为浮点数. 语法: double atof (const char* str); 参数: ...

  8. python count函数代码_python count函数用法详解_后端开发

    fgetc函数的作用详解_后端开发 fgetc函数的作用是从指定文件读入一个字符,要求文件的打开方式必须是以读或读写的方式或者追加的方 式,只写方式是不能读的. 在python中可以使用"c ...

  9. EXCEL公式VLOOKUP函数用法详解

    EXCEL公式VLOOKUP函数用法详解 示例下载 VLOOKUP函数 在表格或数值数组的首列查找指定的数值,并由此返回表格或数组中该数值所在行中指定列处的数值. 这里所说的"数组" ...

最新文章

  1. WebSocket的几个模块(node.js)(未完)
  2. 无刷电机真威武,一通操作猛如虎
  3. 关于小型长周期项目的一些建议
  4. Vue Bootstrap OSS 实现文件上传
  5. 《大数据》第1期“聚焦”——从系统角度审视大数据计算
  6. 第二十九篇、UICollectionView瀑布流
  7. java fx combox,combobox – 带有FXML的组合框JavaFx
  8. php对接海康视频教程_web对接海康威视rtsp视频流
  9. wx-微信公众号-静默登陆授权
  10. Java工程师岗位分析报告
  11. .NET Core 分析程序集更优方法,超越ReflectionOnlyLoad
  12. poj 3295 Tautology
  13. 计算机开始菜的mstsc命令,Win10一周年更新版系统CLSID(GUID)大全
  14. 2007第一天上班想哭
  15. POJ 2924 Gauß in Elementary School(水~)
  16. go语言单元测试报错:missing go.sum entry for module providing package github.com/stretchr/testify/assert
  17. 4 计算机系统的异步性,操作系统复习资料.doc
  18. 如何办理ITSS资质
  19. ue4编译时候初始化全局着色器所需的文件夹缺失
  20. Vit,DeiT,DeepViT,CaiT,CPVT,CVT,CeiT简介

热门文章

  1. 世界国家语言人口一览表
  2. SSM 过滤器的配置 Filter
  3. java计算机毕业设计教学成果管理平台录像演示源代码+数据库+系统+lw文档
  4. mysql数据迁移_MySQL 数据迁移
  5. LED显示屏静电防护指南
  6. 其他浏览器均正常显示,uc不显示效果
  7. android手势解锁说明
  8. 【English】十大词性之介词
  9. 联想小新无线网总断问题
  10. [ 漏洞挖掘基础篇六 ] 漏洞挖掘之越权漏洞挖掘