文件io_feof

1、ferror文件读写错误

feof

语法:

  #include <stdio.h>
  int feof( FILE *stream );

函数feof()在到达给出的文件流的文件尾时返回一个非零值.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    FILE* file;
    file = fopen("E:\\C\\vscode\\C\\file_io\\user.txt", "r");

    if (!file) {
        puts("open fail.");
        return -1;
    }
    char ret_char;
    // while((ret_char=fgetc(file)) != EOF)//循环读到文件结束
    // {
    //     putchar(ret_char);
    // }

    while (!feof(file))
    {
        //  ret_char = fgetc(file);
        //  putchar(ret_char);
        putchar(fgetc(file));
    }
    fclose(file);

}

user文件内容

nike adi
nike adidas
hello world

1、使用fgetc的返回值作为循环地判断,正常打印结果

while((ret_char=fgetc(file)) != EOF)//循环读到文件结束
{
    putchar(ret_char);
}

2、使用feof

为什么使用feof,

比如fgetc读完返回EOF(-1)。

但是有的函数没有读完,失败时候返回-1,需要读取-1,(比如getw)使用feof更加方便和准确。

所以我们使用feof函数进行判断,结尾时候返回非零值。

   while (!feof(file))//没读完一直读
   {
       //  ret_char = fgetc(file);
       //  putchar(ret_char);
       putchar(fgetc(file));
   }

#发现错误:发现多打个一个字符

nike adi
nike adidas
hello world heheA
E:\C\visualStudio\demo\feof_io\x64\Debug\feof_io.exe (进程 10484)已退出,代码为 0。
按任意键关闭此窗口. . .

为什么会多打出一个字符,判断到A的时候,循环还在进行所以多读了一个字符

解决方法:提前读取获取开始的字符

 ret_char = fgetc(file);
 while (!feof(file))
 {        
     //ret_char = fgetc(file);
    // putchar(ret_char);
             
     putchar(ret_char);
     ret_char = fgetc(file);
 }

nike adi
nike adidas
hello world heheA
E:\C\visualStudio\demo\feof_io\x64\Debug\feof_io.exe (进程 32320)已退出,代码为 0。
按任意键关闭此窗口. . .

 结果没有问题

2、ferror文件读写错误

ferror

语法:

  #include <stdio.h>
  int ferror( FILE *stream );

ferror()函数检查stream(流)中的错误, 如果没发生错误返回0,否则返回非零. 如果发生错误, 使用perror()检测发生什么错误.

#include <stdio.h>

int main()
{
    FILE *file;
    file = fopen("E:\\C\\vscode\\C\\file_io\\user.txt", "a");

    if(!file){
        puts("open fail.");
        return -1;
    }else{
        puts("open sucess.");
    }
    
    int  ret;
    ret = fputc('A',file);
     if(ret == EOF)
    {
        puts("fputc失败");
    }
    if(ferror(file))
    {
        perror("fputc");
    }

    fclose(file);

}

设置权限为r的时候,会写入失败

open sucess.
fputc失败
fputc: Bad file descriptor
PS E:\C>

当权限为a的时候,成功写入

使用ferror的时候可以返回失败的原因

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值