C语⾔fgetc和fputc函数⽤法详解
以字符形式读写⽂件时,每次可以从⽂件中读取⼀个字符,或者向⽂件中写⼊⼀个字符。主要使⽤两个函数,分别是 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:\\","r+");
ch =fgetc(fp);
表⽰从D:\⽂件中读取⼀个字符,并保存到变量 ch 中。
在⽂件内部有⼀个位置指针,⽤来指向当前读写到的位置,也就是读写到第⼏个字节。在⽂件打开时,该指针总是指向⽂件的第⼀个字节。使⽤ fgetc() 函数后,该指针会向后移动⼀个字节,所以可以连续多次使⽤ fgetc() 读取多个字符。
注意:这个⽂件内部的位置指针与C语⾔中的指针不是⼀回事。位置指针仅仅是⼀个标志,表⽰⽂件读写到的位置,也就是读写到第⼏个字节,它不表⽰地址。⽂件每读写⼀次,位置指针就会移动⼀次,它不需要你在程序中定义和赋值,⽽是由系统⾃动设置,对⽤户是隐藏的。
【⽰例】在屏幕上显⽰ D:\ ⽂件的内容。
#include<stdio.h>
int main(){
FILE *fp;
char ch;
//如果⽂件不存在,给出提⽰并退出
if((fp=fopen("D:\\","rt"))==NULL){
puts("Fail to open file!");
exit(0);
}putchar函数
//每次读取⼀个字节,直到读取完毕
while((ch=fgetc(fp))!=EOF){
putchar(ch);
}
putchar('\n');//输出换⾏符
fclose(fp);
return0;
}
在D盘下创建 ⽂件,输⼊任意内容并保存,运⾏程序,就会看到刚才输⼊的内容全部都显⽰在屏幕上。mybatis原理分析
该程序的功能是从⽂件中逐个读取字符,在屏幕上显⽰,直到读取完毕。
程序第 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;
//如果⽂件不存在,给出提⽰并退出
beta用户测试
if((fp=fopen("D:\\","rt"))==NULL){
puts("Fail to open file!");
exit(0);
}
//每次读取⼀个字节,直到读取完毕
while((ch=fgetc(fp))!=EOF){
putchar(ch);
}
putchar('\n');//输出换⾏符
if(ferror(fp)){
puts("读取出错");
}else{
php中文网直播课视频puts("读取成功");
}
fclose(fp);
return0;
}curl 下载文件
这样,不管是出错还是正常读取,都能够做到⼼中有数。
字符写⼊函数 fputc
fputc 是 file output char 的所以,意思是向指定的⽂件中写⼊⼀个字符。fputc() 的⽤法为:
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:\\","wt+"))==NULL){
puts("Fail to open file!");
exit(0);
}
printf("Input a string:\n");
//每次从键盘读取⼀个字符并写⼊⽂件
while((ch=getchar())!='\n'){
fputc(ch,fp);
}
fclose(fp);
return0;
}
运⾏程序,输⼊⼀⾏字符并按回车键结束,打开D盘下的 ⽂件,就可以看到刚才输⼊的内容。
程序每次从键盘读取⼀个字符并写⼊⽂件,直到按下回车键,while 条件不成⽴,结束读取。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论