fgetc getc函数

一旦打开了流,则可以在3中不同的类型的非格式化I/O中进行选择,对其进行读、写操作。

(1)每次一个字符的I/O。一次读或写一个字符,如果流是带缓冲的,则标准I/O函数处理所有缓冲。

(2)每次一行的I/O。如果想要一次读或写一行,则使用fgets和fputs。每行都以一个换行符终止。当调用fgets时,应说明能处理的最大行长。

(3)直接I/O。fread和fwrite函数支持这种类型的I/O。每次I/O操作读或者写某种数量的对象,而每个对象具有指定的长度。这两个函数常用于从二进制文件中每次读或写一个结构。

以下3个函数用于一次读一个字符。

#include <stdio.h>
int getc(FILE *fp);
int fgetc(FILE *fp);
int getchar(void);
                                                         3个函数的返回值:若成功,返回下一个字符;若已到达文件尾端或出错,返回EOF
函数getchar()等同于getc(stdin)。前两个函数的区别是,getc可被实现为宏,而fgetc不能实现为宏,这意味着以下几点:

(1)getc的参数不应当是具有副作用的表达式,因为它可能会被计算多次。

(2)因为fgetc一定是一个函数,所以可以得到其地址。这就允许将fgetc的地址作为一个参数传递给另一个函数。

(3)调用fgetc所需时间很可能比调用getc要长,因为调用函数所需的时间通常长于调用宏。

这3个函数在返回下一个字符时,将其unsigned char 类型转换为int类型。说明为无符号的理由是:如果最高位为1也不会使返回值为负。要求整型返回值的理由是,这样就可以返回所有可能的字符值再加上一个已出错或已到达文件尾端的指示值。在<stdio.h>中EOF被要求是一个负值,其值经常是-1.这就意味将这3个参数的返回值存放在一个字符变量中,所以还要讲这些函数的返回值与常量EOF进行比较。

从流中读取数据以后,可以调用ungetc将字符再压回流中。

#include <stdio.h>
int ungetc(int c, FILE *fp);
                                                                          返回值:若成功,返回c;若出错,返回EOF
压回到流中的字符以后又可从流中读出,但读出的字符的顺序与压送回的顺序相反。应当了解,虽然ISO C允许实现支持任何次数的回送,但是它要求实现提供一次只回送一个字符。

回送的字符不一定必须是上一次读到的字符。不能回送EOF。但是当已经到达文件尾端时,仍可以回送一个字符。下次读将返回该字符,再读则返回EOF。之所以能这样做的原因是,一次成功的ungetc调用会清楚该流的文件借宿标志。

注意:用ungetc压送回字符时,并没有将它们写到底层文件中或设备上,只是将它们写回标准I/O库的流缓冲区中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值