fputc和fgetc的使用

注意:

EOF是fgetc函数的返回值,并不是文件中存在EOF) 

int fputc(int ch,FILE *stream);     //向文件中写字符

int fgetc(FILE *stream);     //从文件中读字符

注意:

1)fputc()函数的参数是  int ch,但是传入的时候需直接传入字符;

2)fgetc的返回值是int ,一定不要弄错了。

如果换成char会容易误判:

首先明白三点:

      i)32位系统中 EOF = 0xff ff ff ff;     

      ii)fgetc的返回值类型是int,如果用char作为返回值的话,相当于进行了一步类型转换;

      iii)fgetc参数的范围是0x00 至 0xff,即是个unsigned char

          使用char类型返回 :(错误)

                先扩充至32位int   0x00 00  00 ff 返回 ;转char 后只剩一字节,变成 0xff;

                char与EOF这个int 比较时,会转换为0xff ff ff ff,这样就和EOF相等,造成误判退出;

          使用int类型返回:(正确)

                  先扩充至32位int   0x00 00  00 ff 返回 ;转int后正常输出,变成 0x00 00 00 ff;

                  int与EOF这个int 比较时,0x00 00 00 ff  不等于 0xff ff ff ff,不会造成误判;

ASCII码的数据类型是uchar. 

char ch_put = 'a';//输入char类型
fputc(ch,fp);

int ch_get;	 //这个地方一定要是int才行!!!!!
while ( ( ch= fgetc(fp) ) != EOF)  //不断读取文件知道结束
{
	putchar(ch);
}

详细解释:参考fgetc函数踩过的坑_fireflylane的博客-CSDN博客_fgetc

 附录:数据类型转换顺序

double ←—— float 高 
↑ 
long 
↑ 
unsigned 
↑ 
int ←—— char,short 低 

参考:C基本数据类型的转换顺序_骑着蜗牛'深一'族-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值