计算机科学类专升本复习之“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

fputcfile 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条件"不成立,结束读取。


 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值