Linux学习之应用开发阶段(标准IO二)

言之者无罪,闻之者足以戒。 ——《诗序》

这两天总觉得文章之中只有一个颜色太过单调,所以我就换了一个编译器,以后文章中的颜色会丰富一点。

1、fprintf、printf、sprintf     行缓存函数

int fprintf(FILE *stream,"字符串格式")

fprintf()函数可以输出到文件中,也可以输出到显示器;printf()函数只能输出到显示器;

int sprintf(str *,"字符串格式") ;输出内容到一个字符串中

2、一个字符的读写函数 fgetc和fputc

int fgetc(FILE *fp)

功能:从文件中读取一个字符

参数:文件流(看见文件流就要注意文件流指针)

返回值:正确为读取的字符,到文件结尾或出错时返回EOF(-1)

int fputc(int c,FILE *fp)

功能:写一个字符到文件中

参数:第一个参数为要写的字符,第二个参数为文件流

返回值:成功则返回输入的字符,出错返回EOF(-1)

fputc是否为行缓存?

下面给出一段程序以更好的掌握内容:

#include <stdio.h>
int main(int argc,char *argv[])
{
        FILE *fp;
        int ret;
        fp=fopen("./a.c","w+");
        if(fp==NULL)
        {
                printf("open file a.c failure\n");
                return -1;
        }
        printf("open file a.c sucess\n");
        
        fputc('a',fp);
//      fputc('\n',fp);
//      fflush(fp);
//      while(1);
        rewind(fp);
        ret=fgetc(fp);
        printf("ret= %c\n",ret);
        ret=fgetc(fp);
        printf("ret= %d\n",ret);
        fclose(fp);
        return 0;
}

通过上面的程序我们可以知道fputc确实是有缓存的,但是不是行缓存。

注意:一般我们是先写然后再去读,但是如果写完之后直接读取那么读取的结果就是错误的,所以在写过之后读取之前我们需要把文件指针指向要开始读取的位置,这样才能得到正确的结果。也就是我们前面学过的fflush()函数和fseek()函数。

3、怎样判断返回出错的类型?

当返回出错时,我们怎样去判断是已经到达文件结尾,还是读错呢?

下面介绍几个函数用于判断:

1)、int feof(FILE *stream);

功能:判断是否已经到达文件结束

参数:文件流

返回值:到文件结束,返回为非0,不是则返回0

2)、int ferror(FILE *stream);

功能:判断是否读写错误

参数:文件流

返回值:是读写错误,返回为非0,不是则返回0

3)、void clearerr(FILE *stream);

功能:清除流错误

参数:文件流

下面给出程序巩固以上知识:

#include <stdio.h>
int main(int argc,char *argv[])
{
        FILE *fp;
        int ret;
        fp=fopen("./a.c","w+");
        if(fp==NULL)
        {
                printf("open file a.c failure\n");
                return -1;
        }
        printf("open file a.c sucess\n");

        fputc('a',fp);
        rewind(fp);
        ret=fgetc(fp);
        printf("ret= %c\n",ret);
        ret=fgetc(fp);
        printf("ret= %d\n",ret);
        printf("feof=%d,ferror=%d\n",feof(fp),ferror(fp));
        clearerr(fp);
        printf("clear error after:feof=%d,ferror=%d\n",feof(fp),ferror(fp));
        fclose(fp);
        return 0;
}

程序的运行结果也给大家截张图:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值