计算机科学类专升本复习之“C语言fgetc和fputc函数用法”详解(初稿)
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函数用法”详解(初稿)相关推荐
- 计算机科学类专升本复习之“C语言结构体”详解(初稿)
C语言结构体详解,C语言struct用法详解 前面所学到的"数组":它是一组具有"相同类型"的数据的集合. 但是在实际的编程中,我们往往还需要 一组" ...
- 计算机科学类专升本复习之“C语言fopen函数的用法”详解(初稿)
C语言fopen函数的用法,C语言打开文件详解 在C语言中,"操作文件" 之前 必须 先"打开文件"; 所谓"打开文件",就是让 " ...
- 计算机科学类专升本复习之“C语言函数定义”详解(初稿)
今天首先要讲的是C语言的无参函数定义 函数 如果不接收"用户传递"的数据,那么定义时可以不带参数 例如: dataType kangkang(){ //nb } dataType: ...
- string类的用法详解
//string函数用法详解!附代码,写具体的用法! #include <iostream> #include <string> #include <sstream> ...
- 大学计算机基础专升本复习提纲
大学计算机基础专升本复习提纲 <大学计算机基础>专升本考试复习提纲 一. 计算机的诞生.发展.分类.特点及应用等基本知识 诞生:时间.地点.名称.创始人.结构 (1946年.美国宾夕法尼亚 ...
- ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解
一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...
- python定义类object_Python之ClassObject用法详解
类和对象的概念很难去用简明的文字描述清楚.从知乎上面的一个回答中可以尝试去理解: 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行 ...
- C#中NameValueCollection类用法详解
C#中NameValueCollection类用法详解,1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCol ...
- python中的super用法详解_【Python】【类】super用法详解
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...
最新文章
- Java中getResourceAsStream的用法
- instanceof与typeof 运算符
- Windows10看视频出现蓝屏重启
- iphone x屏幕尺寸_苹果公布 iPhone 12/12 Pro 屏幕更换价格,网友:碎不起!
- 面试题整理12 求字符串括号最大深度子串
- vim一直以来的切换命令行窗口(term)执行程序的烦恼终于由8.1版本的一个命令解决了
- [摘抄]软件设计模式的几个原则
- Struts+DAO框架搭建完成!(源码)
- html css 走马灯,纯css 实现跑马灯效果
- C++ 动态联编实现原理分析
- 金蝶K3 WISE BOM多级展开_销售成本表
- Synergy两台电脑使用同一个鼠标和键盘
- power automate desktop获取股票网页数据
- 计算机图形学——大作业
- Java集成第三方推送(极光推送)——文档篇
- html怎么把桌面的图片放大缩小,css怎么让图片随屏幕变化大小
- GBT 31000-2015 社会治安综合治理基础数据规范 数据项 编码
- C++知识讲解(二)
- mt,sgd,gd含义
- @程序员:今日七夕,宜找对象