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

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

咱们接下来介绍以"字符形式" 读写 文件

以"字符"形式 读写文件时,每次可以从文件中"读取一个字符",或者向文件中"写入一个字符"。

主要使用两个函数   fgetc()函数(字符读取函数)fputc()函数(字符写入函数)

一、字符读取函数 fgetc

fgetc是 file get char 的缩写,意思时从 "指定"的文件中 读取 一个字符

fgetc()的用法:

int fgetc(FILE *fp);

fp为"文件指针" 强调N遍了!!!

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语言中的指针"不是一回事

"位置指针": 仅仅是一个标志,表示"文件的读写位置",也就是读写到第几节,它不表示地址。

文件每读写一次,"位置指针"就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对用户是隐藏的

接下来写个程序吧

//eg在屏幕上显示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 文件,输入任意内容并保存,运行程序,就会看到刚才输入的内容全部都显示在屏幕上。

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

该程序的第15行是关键"while循环"的条件为(ch=fgetc(fp)) != EOF 。

fgetc()每次从"位置指针"所在的位置"读取一个字符",并保存到"变量ch",位置指针"向后移动一个字节"。

当"文件指针"移动到"文件末尾"时,fgetc()就无法读取字符了,于是返回EOF,表示文件读取结束了。

//对EOF的说明

EOF本来表示"文件末尾",意味着"读取结束",但是很多函数在"读取出错"时也返回EOF,那么当返回EOF时到底是读取完毕了还是读取出错了?

这时,我们可以借用 stdio.h 中的两个函数来判断,分别是"feof()"和"ferror()"。

1. feof()函数用来 判断 "文件内部指针"是否指向"文件末尾"

它的原型是:

int feof(FILF *fp);

指向"文件末尾"时 返回"非零值",否则 返回"零值"。

2. ferror()函数用来 判断 "文件操作"是否"出错"。

它的原型是:

int ferror(FILE *fp);

出错时返回"非零值",否则返回"零值。"

二、字符写入函数fputc

fputc是 file output char 的缩写,意思是"向指定的文件" 写入 "一个字符"。

fputc()的用法为:

int fputc(int ch,FILE *fp);

"ch"为要写入的字符

"fp"为文件指针

fputc()写入成功返回写入的字符,失败时返回EOF,返回值类型为int,也是为了容纳这个负数。

例如:

foutc('a',fp);

或者:

char ch = 'a';

fputc(ch,fp);

表示把字符'a'写入fp所指向的文件中。

//两点说明:

1. 被写入的文件可以用"写、读写、追加"方式打开

用"读写"方式打开一个"已存在的文件"时清除原有文件内容,并将写入的字符放在"文件开头"。

如果需要"保留原有文件内容",写入的字符放在"文件末尾",就必须"追加"方式打开文件。

不管以何种方式打开,"被写入的文件"若不存在时 则 创建该文件。

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

举个程序例子加深印象吧

//eg从键盘输入一行字符,写入文件

#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语言结构体”详解(初稿)

    C语言结构体详解,C语言struct用法详解 前面所学到的"数组":它是一组具有"相同类型"的数据的集合. 但是在实际的编程中,我们往往还需要 一组" ...

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

    C语言fopen函数的用法,C语言打开文件详解 在C语言中,"操作文件" 之前 必须 先"打开文件"; 所谓"打开文件",就是让 " ...

  3. 计算机科学类专升本复习之“C语言函数定义”详解(初稿)

    今天首先要讲的是C语言的无参函数定义 函数 如果不接收"用户传递"的数据,那么定义时可以不带参数 例如: dataType kangkang(){ //nb } dataType: ...

  4. string类的用法详解

    //string函数用法详解!附代码,写具体的用法! #include <iostream> #include <string> #include <sstream> ...

  5. 大学计算机基础专升本复习提纲

    大学计算机基础专升本复习提纲 <大学计算机基础>专升本考试复习提纲 一. 计算机的诞生.发展.分类.特点及应用等基本知识 诞生:时间.地点.名称.创始人.结构 (1946年.美国宾夕法尼亚 ...

  6. ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解

    一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...

  7. python定义类object_Python之ClassObject用法详解

    类和对象的概念很难去用简明的文字描述清楚.从知乎上面的一个回答中可以尝试去理解: 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行 ...

  8. C#中NameValueCollection类用法详解

    C#中NameValueCollection类用法详解,1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCol ...

  9. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

最新文章

  1. Java中getResourceAsStream的用法
  2. instanceof与typeof 运算符
  3. Windows10看视频出现蓝屏重启
  4. iphone x屏幕尺寸_苹果公布 iPhone 12/12 Pro 屏幕更换价格,网友:碎不起!
  5. 面试题整理12 求字符串括号最大深度子串
  6. vim一直以来的切换命令行窗口(term)执行程序的烦恼终于由8.1版本的一个命令解决了
  7. [摘抄]软件设计模式的几个原则
  8. Struts+DAO框架搭建完成!(源码)
  9. html css 走马灯,纯css 实现跑马灯效果
  10. C++ 动态联编实现原理分析
  11. 金蝶K3 WISE BOM多级展开_销售成本表
  12. Synergy两台电脑使用同一个鼠标和键盘
  13. power automate desktop获取股票网页数据
  14. 计算机图形学——大作业
  15. Java集成第三方推送(极光推送)——文档篇
  16. html怎么把桌面的图片放大缩小,css怎么让图片随屏幕变化大小
  17. GBT 31000-2015 社会治安综合治理基础数据规范 数据项 编码
  18. C++知识讲解(二)
  19. mt,sgd,gd含义
  20. @程序员:今日七夕,宜找对象

热门文章

  1. 12.【乘法口诀表】
  2. jupyter入门之Matplotlib
  3. Robotstudio教程之示教编程与仿真运行
  4. C语言文件:从键盘输入一些字符,并逐个把它们送到磁盘上去,直到用户输入一个“!”为止。
  5. Ajax,AjaxPro说明
  6. mongodb导入导出数据
  7. 初入职场的新人,你的什么行为或者话会让老员工反感?
  8. #2015年盘点第一弹#八大事件复盘O2O棋局
  9. 如何构建营销活动平台(四):规则引擎设计
  10. 《啊哈!算法》知识点汇总