相关博文:C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
相关博文:C语言之文件读写探究(二):fputc、fgetc、feof(一次读写一个字符(文本操作))
相关博文:C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))
相关博文:C语言之文件读写探究(四):fwrite、fread(一次读写一块数据(二进制操作))
相关博文:C语言之文件读写探究(五):rewind、ftell、fseek(文件指针偏移)
相关博文:C语言之文件读写探究(六):fscanf、fprintf(格式化读写文件)
相关博文:C语言之文件读写探究(七):随机读写文件

行的定义

  行是文本编辑器中的概念,文件流中就是一个字符。这个在不同的平台是有差异的。window平台’\r\n’,linux平台是’\n’。

平台差异

  windows平台在写入’\n’是会体现为’’,linux平台在写入’\n’时会体现为’\n’。windows平台在读入’\r\n’时,体现为一个字符’\n’,linux平台在读入’\n’时,体现为一个字符’\n’。
  linux读windows中的换行,则会多读一个字符,windos读linux中的换行,则没有问题。

测试1:写入
测试2:

fputs


例1:

附例1代码:

//小问学编程
#include<stdio.h>int main( )
{FILE* fp=fopen("hello.txt","w");if(fp==NULL){printf("open error\n");return -1;}printf("%d\n",fputs("1234567890\n",fp));//0 or -1char buf[]="xyz";printf("%d\n",fputs(buf,fp));           //0 or -1fclose(fp);return 0;
}

fgets


  按行读取,重点是判断,结束条件是什么?通常的作法是依据返回值。
例2:

附例2代码:

//小问学编程
#include<stdio.h>
#define N 1024
//N-1个字符前遇到了\n EOF
//1->abcd\n+\0
//2->abcd1234567+\0
//还没有遇到\n EOF 读取的数据到了上限
//3->abc+\0int main()
{FILE* pf=fopen("hello.txt","w+");if(pf==NULL)exit(-1);fputs("abcd\n1234567",pf);//fputs("abcd1234567",pf);rewind(pf);char buf[N];while(fgets(buf,N-1,pf))printf("%s",buf);fclose(pf);
}int main2()
{FILE* pf=fopen("hello.txt","w+");if(pf==NULL)exit(-1);fputs("abcd\n1234567",pf);//fputs("abcd\n1234567",pf);rewind(pf);char buf[N];//遇到\n EOF的时候返回非空,在EOF以后,再去读,NULLprintf("%p\n",fgets(buf,N-1,pf));printf("%p\n",fgets(buf,N-1,pf));printf("%p\n",fgets(buf,N-1,pf));//fgets(buf,N-1,pf);//fgets(buf,4,pf);puts(buf);fclose(pf);
}int main1()
{FILE* pf=fopen("hello.txt","w+");if(pf==NULL)exit(-1);fputs("abcd\n1234567",pf);//fputs("abc1234567",pf);rewind(pf);char buf[N];fgets(buf,N-1,pf);//fgets(buf,N-1,pf);//fgets(buf,4,pf);puts(buf);fclose(pf);return 0;
}

feof

  如果最后一行,没有行’\n’的话则少读一行。
linux中无论是gedit还是vim系统会自动在末位添加\n标志。Windows当中要注意系统不会自动添加\n,最好用返回值来判断,是否读到尾。

例3:

附例3代码:

//小问学编程
#include<stdio.h>int main()
{FILE* fp=fopen("hello.txt","w+");if(fp==NULL)return -1;fputs("aaaaaaaaaaaaaaa\n",fp);fputs("bbbbbbbbbbbbbbb\n",fp);fputs("ccccccccccccccc\n",fp);fputs("ddddddddddddddd\n",fp);fputs("eeeeeeeeeeeeeee\n",fp);fputs("fffffffffffffff",fp);rewind(fp);char buf[30]={0};while(fgets(buf,30,fp)&&!feof(fp))//取最后一行的时候feof已经认为空了{printf("%s",buf);}fclose(fp);return 0;
}

注意事项

  读到 buf 内的字符串,可含有空白格式控制字符,比如 ‘\n’ ‘\r\n’ ‘\t’ 等,如果直接用作比较等用途,可能得不到正确的结果。

下面例子调用多次fputs函数将几个字符串写入文件中,然后调用fgets函数读取并打印到屏幕上:

例4:

附例4代码:

//小问学编程
#include<stdio.h>
#include<stdlib.h>#define MAX 1024int main()
{FILE* fp;char buffer[MAX];if((fp=fopen("hello.txt","w"))==NULL){printf("打开文件失败!\n");exit(-1);}fputs("what a pretty girl!\n",fp);fputs("what a cool boy!\n",fp);fputs("I am your friend!\n",fp);fclose(fp);//重新打开文件if((fp=fopen("hello.txt","r"))==NULL){printf("打开文件失败!\n");exit(-1);}while(!feof(fp)){fgets(buffer,MAX,fp);printf("%s",buffer);}fclose(fp);return 0;
}

  分析:feof函数用于检测eof指示器是否被设置,如果检测到文件末尾指示器被设置,返回一个非0值;否则返回0。
注意:
  在这个程序中先关闭再重新打开hello.txt文件,这样做是为了确保内容都写入了文件中,并从文件头开始读取字符串。
  程序出了一点小意外,第三行字符串打印了两次,但是查看hello.txt文件的内容却是正确的。

分析:这是因为fgets函数一旦遇到换行符(’\n’)就会停止本次字符串的读取,而在最后一行字符串读取完成之后,并没有遇到EOF(是换行符导致了本次读取结束),所以它还要多读取一次,但是这一次除了读取到EOF就没有其他内容了,因此buffer字符串的内容并没有被新的内容所覆盖。

C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))相关推荐

  1. C语言之文件读写探究(六):fscanf、fprintf(格式化读写文件)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  2. C语言之文件读写探究(二):fputc、fgetc、feof(一次读写一个字符(文本操作))

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  3. 用c语言对文件读取,并使用链表,和顺序表进行存储,操作

    有一些,经典的对文件的操作. fin = fopen ( argv[1], "rt" );//获取文件的指针 if ( fin == NULL )//判断是否为空 { fprint ...

  4. C语言之文件读写探究(七):随机读写文件

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  5. C语言之文件读写探究(五):rewind、ftell、fseek(文件指针偏移)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  6. C语言之文件读写探究(四):fwrite、fread(一次读写一块数据(二进制操作))

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  7. C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)

    相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...

  8. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )

    文章目录 一.追加键值对数据 二.更新键值对数据 三.完整代码示例 一.追加键值对数据 在上一篇博客 [C 语言]文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取 ...

  9. C语言---14文件操作---01文件内容的顺序读写

    文中的源码都在这里哦!!! 文中的源码都在这里哦!!! 一.文件的基本概念 一个文件通常是磁盘上一段命名的存储区 磁盘文件(通常用的文件):指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使 ...

最新文章

  1. 腾讯张正友:攻克可进化机器人,6个研究趋势与7大技术突破点
  2. Java接口能不能有静态方法_接口可以在Java中使用静态方法吗?
  3. python中时间处理去空格去冒号_Python实用日期时间处理方法汇总
  4. iOS开发,轻松获取根控制器当前控制器的正确方式
  5. C++ set简介及简单应用
  6. 无法支持python程序的编辑运行和调试_解决pycharm的Python console不能调试当前程序的问题...
  7. 记录-如何测试服务器是否支持ipv6
  8. Frodo and pillows CodeForces - 760B (二分)
  9. 帝国cms如何安装php模板,帝国CMS整站源码通用安装教程
  10. 设计模式(一)--编程界的九阳神功
  11. Python​ 重解零基础100题(2)
  12. Android7.08.0 电池图标分析
  13. 超市管理系统Java
  14. 一些小软件闪退的解决方案
  15. 百度云下载转化为迅雷下载的解决办法
  16. 全球BT下载网站排名
  17. The Home Depot - 家得宝
  18. SQLSERVER完全优化教程
  19. RNA 25. SCI文章中只有生信没有实验该怎么办?
  20. Redis常见面试题汇总

热门文章

  1. FusionChartsFree免费的报表
  2. 详解HTML5中rel属性的prefetch预加载功能使用
  3. Linux下SHELL的PS1变量简介
  4. ACM——A + B Problem (4)
  5. delphi学习路线
  6. 使用VC6.0开发COM组件 - 傻瓜式,不讲理论,只讲实例
  7. 记事本可以编辑html语言吗,笔记本win7系统使用记事本编辑和运行html代码的方法...
  8. netty冲突 play sbt_尝试添加MySQL / slick后,Strange Play Framework 2.2异常
  9. Python+sklearn机器学习应该了解的33个基本概念
  10. 2018年全国高校教师“Python编程、应用及华为大数据”培训班