C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))
相关博文: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(一次读写一行字符(文本操作))相关推荐
- C语言之文件读写探究(六):fscanf、fprintf(格式化读写文件)
相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...
- C语言之文件读写探究(二):fputc、fgetc、feof(一次读写一个字符(文本操作))
相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...
- 用c语言对文件读取,并使用链表,和顺序表进行存储,操作
有一些,经典的对文件的操作. fin = fopen ( argv[1], "rt" );//获取文件的指针 if ( fin == NULL )//判断是否为空 { fprint ...
- C语言之文件读写探究(七):随机读写文件
相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...
- C语言之文件读写探究(五):rewind、ftell、fseek(文件指针偏移)
相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...
- C语言之文件读写探究(四):fwrite、fread(一次读写一块数据(二进制操作))
相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...
- C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
相关博文:C语言之文件读写探究(一):fopen.fclose(文件的打开和关闭) 相关博文:C语言之文件读写探究(二):fputc.fgetc.feof(一次读写一个字符(文本操作)) 相关博文:C ...
- 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
文章目录 一.追加键值对数据 二.更新键值对数据 三.完整代码示例 一.追加键值对数据 在上一篇博客 [C 语言]文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取 ...
- C语言---14文件操作---01文件内容的顺序读写
文中的源码都在这里哦!!! 文中的源码都在这里哦!!! 一.文件的基本概念 一个文件通常是磁盘上一段命名的存储区 磁盘文件(通常用的文件):指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使 ...
最新文章
- 腾讯张正友:攻克可进化机器人,6个研究趋势与7大技术突破点
- Java接口能不能有静态方法_接口可以在Java中使用静态方法吗?
- python中时间处理去空格去冒号_Python实用日期时间处理方法汇总
- iOS开发,轻松获取根控制器当前控制器的正确方式
- C++ set简介及简单应用
- 无法支持python程序的编辑运行和调试_解决pycharm的Python console不能调试当前程序的问题...
- 记录-如何测试服务器是否支持ipv6
- Frodo and pillows CodeForces - 760B (二分)
- 帝国cms如何安装php模板,帝国CMS整站源码通用安装教程
- 设计模式(一)--编程界的九阳神功
- Python​ 重解零基础100题(2)
- Android7.08.0 电池图标分析
- 超市管理系统Java
- 一些小软件闪退的解决方案
- 百度云下载转化为迅雷下载的解决办法
- 全球BT下载网站排名
- The Home Depot - 家得宝
- SQLSERVER完全优化教程
- RNA 25. SCI文章中只有生信没有实验该怎么办?
- Redis常见面试题汇总
热门文章
- FusionChartsFree免费的报表
- 详解HTML5中rel属性的prefetch预加载功能使用
- Linux下SHELL的PS1变量简介
- ACM——A + B Problem (4)
- delphi学习路线
- 使用VC6.0开发COM组件 - 傻瓜式,不讲理论,只讲实例
- 记事本可以编辑html语言吗,笔记本win7系统使用记事本编辑和运行html代码的方法...
- netty冲突 play sbt_尝试添加MySQL / slick后,Strange Play Framework 2.2异常
- Python+sklearn机器学习应该了解的33个基本概念
- 2018年全国高校教师“Python编程、应用及华为大数据”培训班