while(!feof(in))问题 [问题点数:50分,结帖人jtidni]

Bbs1
本版专家分:8
结帖率 100%
Bbs1
本版专家分:8
Bbs8
本版专家分:47278
Blank
黄花 2018年10月 C/C++大版内专家分月排行榜第二
2018年6月 C/C++大版内专家分月排行榜第二
2018年1月 C/C++大版内专家分月排行榜第二
2017年12月 C/C++大版内专家分月排行榜第二
2017年8月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2018年5月 C/C++大版内专家分月排行榜第三
2018年4月 C/C++大版内专家分月排行榜第三
2018年3月 C/C++大版内专家分月排行榜第三
2018年2月 C/C++大版内专家分月排行榜第三
2017年11月 C/C++大版内专家分月排行榜第三
2017年10月 C/C++大版内专家分月排行榜第三
2017年9月 C/C++大版内专家分月排行榜第三
2017年6月 C/C++大版内专家分月排行榜第三
2017年5月 C/C++大版内专家分月排行榜第三
2017年4月 C/C++大版内专家分月排行榜第三
2017年3月 C/C++大版内专家分月排行榜第三
Bbs10
本版专家分:139236
版主
Blank
进士 2018年总版新获得的技术专家分排名前十
2017年 总版技术专家分年内排行榜第六
Blank
金牌 2018年1月 总版技术专家分月排行榜第一
2016年12月 总版技术专家分月排行榜第一
2016年11月 总版技术专家分月排行榜第一
2016年10月 总版技术专家分月排行榜第一
Blank
优秀版主 2016年10月优秀大版主
2016年8月优秀大版主
Blank
银牌 2018年5月 总版技术专家分月排行榜第二
2017年12月 总版技术专家分月排行榜第二
2016年9月 总版技术专家分月排行榜第二
feof() 函数的陷阱……
使用<em>feof</em>()的时候,掉陷阱里了,总是少输出一条:  <em>while</em> ( !<em>feof</em>(fp) ) { flag = fgets(buffer,300,fp); cout << bufferset
C语言 while(feof(fp)){}多循环一次解决方案
不用<em>feof</em>() 使用fgetc(fp)==EOF判断是否进行x
feof 函数 while循环引发的断错误及调试方法
学习lex and yacc,例子ch1-05.*执行命令 如下:               lex   ch1-05.l               bison  -d  ch1-05.y               cc   -c   lex.y.c   ch1-05.tab.c               cc   -o   ch105     le
怎样解决使用feof()函数时出现的问题
<em>feof</em>函数        昨天在做一个课程设计时,一个函数的功能是将文件中的数据一条条的读到链表中去。既然不确定有多少条数据,那只能借助<em>feof</em>()函数了,本来文件部分就没学好,也就知道这一个方法。但是在测试的后就发现了它的<em>问题</em>,就是在判断是否到达文件尾的时候,它会多读一次,就导致从文件读出的部分内容是错的。可能在课堂上老师就讲到了,可是我不知道当时在干啥,反正就是不记得。更关键的是我还不知道
feof多读一次问题分析
在读完文件的最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而<em>feof</em>()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,<em>feof</em>()才能探测到文件结尾。这样就多执行了一次。对于<em>feof</em>()这个函数, 它是先读再判断是否到文件尾, 也就是说在它之前一定要读一次才能做出判断。 而我们经常这样把它使用在循环中: int c; <em>while</em>(!<em>feof</em>(fp))
函数feof使用注意事项
本文主要讲讲当<em>feof</em>遇到fgets时,发生的尴尬故事!
feof()原理和用法
一、<em>feof</em>()是什么? <em>feof</em>()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0 一般在文件操作,中经常使用<em>feof</em>()判断文件是否结束。 二、<em>feof</em>()的经典错误 根据这个函数的定义,一般大家都是这样使用的,但是这样使用,文件中无论是否有内容,都会被判断为“文件不为空”。 #include&amp;amp;lt;stdio.h&amp;amp;gt; int mai...
关于feof函数的一点问题
#include int main(){    FILE *in,*out;    char ch,infile[10],outfile[10];    printf("Enter the infile name:");    scanf("%s",infile);    in=fopen(infile,"r");        if(in==NULL)    {         prin
文件流中读行的正确使用(fgets、feof、ferror)
char *fgets(char *buf, int bufsize, FILE *stream);功能fgets函数用来从stream所指文件中读入bufsize-1个字符放入buf为起始地址的空间内;如果在未读满bufsize-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,调用fgets函数时,最多只能读入bufsize-
feof的使用
在未知文件长度的 情况下,对文件进行读写,要作好文件读写结束的判断。 但<em>feof</em>()有点小毛病,特点:先读,根据读的结果来置位标志位,然后依据标志位来判断是否结束,故有如下三种 写法: 第一种写法,会读到标志位,不应采取,新手,容易范的错误。 第二种写法,可行,但是循环写的不够漂亮。 第三种写法, 应该作为标准写法来推行。 /*  *方案一:先判断,后读取  */ <em>while</em> (
关于feof函数使用的说明
函数原型: int <em>feof</em>(FILE *stream); 功能:检测流上的文件结束符 返回值:<em>feof</em>(fp)有两个返回值:如果遇到文件结束,函数<em>feof</em>(fp)的值为非零值,否则为0。 什么时候结束了,当读取到那个字节为0xFF时,就结束了。 EOF是文本文件结束的标志,在文本文件中都是以ASCII码字符表示的,取值范围 0-127 共128个字符,EOF的16进制代码为0x1A(十进
PHP feof() 函数读文件的使用
 (PHP 4, PHP 5)<em>feof</em> — 测试文件指针是否到了文件结束的位置如果服务器没有关闭由 fsockopen() 所打开的连接,<em>feof</em>() 会一直等待直到超时而返回TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。 文件指针必须是有效的,必须指向由 fopen() 或fsockopen() 成功打开的
从文件读入数据块时用feof(fp)判断文件结尾真的保险吗?
今天用文件输入时发现了一个值得注意的<em>问题</em>。 先看程序: #include #include int main(void) { FILE*in=fopen("1.txt","r"); int a,b; if(in==NULL) { printf("error:cannot open infile !\n"); r
while(!feof(cfPtr))的问题
源码如下:rn[code=C/C++]rn#include rnrnstruct clientDatarn int acctNum;rn char lastName[15];rn char firstName[10];rn double balance;rn;rnrnint main()rnrn FILE *cfPtr;rn struct clientData client = 0, "", "", 0.0;rnrn if((cfPtr = fopen("credit.dat", "rb+"))==NULL)rn printf("File could not be opened.\n");rn rnrn elsern printf("%-6s%-16s%-11s%10s\n", "Acct", "Last Name","First Name", "Balance");rnrn fread(&client, sizeof(struct clientData), 1,cfPtr); //mark 2-1rn <em>while</em>(!<em>feof</em>(cfPtr))rn //fread(&client, sizeof(struct clientData), 1,cfPtr); //mark 1-1rn if(client.acctNum !=0 )rn printf("%-6d%-16s%11s%10.2f\n", client.acctNum, client.lastName, client.firstName, client.balance);rn rn fread(&client, sizeof(struct clientData), 1,cfPtr); //mark 2-2rn rn fclose(cfPtr);rn rn return 0;rnrn[/code]rnrn<em>问题</em>:上面代码把mark2-1和mark2-2两处删除,换为mark1-1一处,会多一行,根据写入的数据来对比,mark1的代码有点<em>问题</em>,求解释。rnrn写入数据如图1:rnhttp://hi.csdn.net/attachment/201108/24/9852890_1314172371BW1b.jpgrnmark2读出数据如图2:rnhttp://hi.csdn.net/attachment/201108/24/9852890_1314172371XllM.jpgrnmark1读出数据如图3:rnhttp://hi.csdn.net/attachment/201108/24/9852890_1314172372FwVh.jpgrnrn
ftell、fread、fseek、feof 详细的使用介绍与注意细节
1. long ftell(FILE *stream);功能:用于得到文件位置指针当前位置相对于文件首的偏移字节数2. size_t fread ( void *buffer, size_t size, size_t count, FILE *stream)功能:从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回
关于C语言feof()函数判断文件结尾的问题分析
相信很多C语言初学者都遇到过这种情况: 使用 <em>while</em>(!<em>feof</em>(fp)) { fscanf(...); //或者 //fread(...) } 读文件时经常会重复读最后一段字符。 据说当年的X老师对此也很困惑,还曾经对此做过专题分析…… 实际上这并没有多么高深莫测,也不是<em>feof</em>()函数的bug,只是我们不了解<em>feof</em>()函数的性质。 <em>feof</em>()的性质: 只
fread函数 和 feof函数
fread(从文件流读取数据) 相关函数 fopen,fwrite,fseek,fscanf 表头文件 #include 定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
feof()判断文件时出现多读内容的问题
昨天将自己以前做的电子通讯录加上了文件读写的功能,是的数据可以关机保存,开机读取。 在修改的过程中出现了一个<em>问题</em>就是每次开启程序时,读文件内的内容总是会在最后多读一串数据,经过上网查询找到了<em>问题</em>所在。 下面我先把我原来写的错误的程序部分贴出 <em>while</em>(0 == <em>feof</em>(stream))  { fread(&from,sizeof(struct file_node),1,stream)
关于feof函数多读一次的问题
在完成通信录的过程中总是多读出一个0,对此我进行了多次调试。 下面是成功的代码 void load_txl(Link *head) { Link temp = *head; Link newnode = NULL; FILE *fp; int i; if((fp = fopen("txl.txt","r")) == NULL) { printf("打开失败!\n");
feof多读一次问题解决方案
<em>feof</em>(fp)多读一次<em>问题</em> 解决一: int c; c = fgetc(fp);   <em>while</em>(!<em>feof</em>(fp)) {   printf("%x\n",c);   c = fgetc(fp);   } <em>feof</em>(fp)先读再判断是否到文件尾 解决二: int c; fseek(fp, 0, 2); c = ftell(fp); rewind(fp)
C语言中的feof函数
函数名   <em>feof</em> 功 能   检测流上的文件结束符 用 法   int <em>feof</em>(FILE *stream); 程序例   #include stdio.h>   int main(void)   {   FILE *stream;   /* open a file for reading *
文件操作函数feof判断是否指向文件的结尾处,结尾即为空字符
#include #include int main() { FILE *fStream = NULL; int iReturn = 1; char ch; fStream = fopen("d:\\wimrepairread.txt","r+"); if (fStream != NULL) { fseek(fStream,0,SEEK_SET); ch = fg
C语言再学习 -- EOF、feof函数、ferror函数
EOF是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。 EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。 #define EOF (-1) 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在<em>while</em>循环中以EOF作为文件结束标志,
fgets与feof 判断文件结尾
fgets 是读取文件中的一行,
c语言 判断文件结束问题 feof()
最近做开发的时候用到c语言文件的读写函数fread(),采用<em>while</em>(!<em>feof</em>(fp))来控制循环,结果发现每次读取数据的时候总会把最后一个数据单元读取两次,很是不解。         后来查找资料发现,原来fread()在读到文件最后一个字节时,<em>feof</em>(fp)还是为0值,此时<em>while</em>(!<em>feof</em>(fp))的控制条件依然为真,所以会将最后一个数据单元再次读取一遍。然后<em>feof</em>(fp)才为
关于C语言中feof的使用
本篇博客结合原理和实例分析了C语言编程中<em>feof</em>()函数的使用和EOF的含义。
C语言:feof 测试 --- 文件末尾,数据重复问题
如下程序: #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;string.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;sys/stat.h&amp;amp;amp;gt; typedef unsigned char BYTE; typedef uns
fread feof 文件尾读取重复的问题
<em>问题</em>:  多路归并排序时,每次通过fread读取小文件里的一个double数据,通过<em>feof</em>判断是否读取结束,  结果,在最后总的排序文件中,每个小文件的最后一行的数据回重复一遍 原因:   <em>feof</em>只是检查标志位,如果是good则返回0,是bad就返回1。   更改标志位的fread函数,只有当它读不到东西了,才会把标志位从good变成bad,当fread读到最后一个字符时,由
feof相关问题
用fread读取文件的时候会重复最后一段,查了一下是<em>feof</em>的原因。 <em>feof</em>(p)用于判断文件指针p在其所指的文件中的位置,如果到文件末,函数返回1,否则返回0, 重复读取的原因是只有当文件位置指针到了文件末尾,再发生读/写操作,然后再调用<em>feof</em>(),才会得到文件结束的信息。也就是说<em>feof</em>()是要先读过才可以判断是否到了文件尾。 <em>while</em>()的条件我也老蒙,必须掰扯的特别细,<em>feof</em>...
关于feof()多读取一次的问题(还未解决)
在编写C语言学生信息管理系统时,想编写一个读取文本的小功能时意外遇到一个小<em>问题</em>。void query()//读取文件 { FILE *P=fopen("E:\\practise\\a.txt","r");//以读的方式打开文件 char s[1024]={0};//分配一个空间 <em>while</em>(!<em>feof</em>(P)) { printf("%s"
fgets重复读取最后一行,都是feof惹的祸
写了一个小程序用于读取文件,每次输出时最后一行都重复输出,经Debug发现是因为<em>feof</em>慢了一拍。当fgets读过最后哦一行之后,<em>feof</em>()仍然返回的是0,又一次读出错之后<em>feof</em>才检测到文件结束。下面用代码来说明:  FILE *fd;   char buf[1024];   string temp;   fd = fopen(filename.c_str(), "rb");   i
记一次课程设计
<em>while</em>(!<em>feof</em>(fp)) { memset(textstring, 0, sizeof(textstring)); fgets(textstring, sizeof(textstring) - 1, fp); // 包含了\n if(strcmp(name,textstring)==0){//判断字符是否相等 ok=1; break; } } if(ok){
php开发之文件系统
1,打开/关闭文件 打开/关闭文件分别使用fopen()函数和fclose()函数。打开文件时应该特别注意,一不小心就有可能将文件内容全部删掉。 (1) 打开文件 fopen()函数,语法格式如下: resource fopen(string filename,string mode [,bool use_include_path]); 参数filename 是要打开的包含路径的文件名,可
feof()函数和EOF结束符的区别与联系
windows下的txt文本文件中的内容都是ASCⅡ代码值的形式存放的。众所周知,ASCII 码的范围是在0至255.对于其他范围的值是无法识别的,因此像-1这样的值是不能转化成相应的字符存在于文本文件当中的。但是对于二进制文件来说,-1确实是可以出现的。 <em>feof</em>()函数在c/c++中是用来判断当前要操作的文件是否结尾,如果文件已结尾,返回值为1,否则就返回0.它判断文件是否结尾的原理是与数据
判断文件结尾的方法(feof函数和EOF)
当以文本方式读写文件时,可以用EOF判断文件是否结尾,因为EOF=-1,而字符的ASCII码不可能为负数。 例如,当fp为文本方式读取的指针时getc(fp)!=EOF可判断是否读到文件结尾当以二进制方式读写文件时,只能用<em>feof</em>函数判断,因为二进制读取数值,可能为负。 <em>feof</em>函数原型为int <em>feof</em>(FILE *stream)当未读到结尾时,返回值为0,读到结尾时,返回值为1<em>feof</em>不仅适
关于使用fseek函数之后feof函数无法结束文件的警告 http://bbs.csdn.net/topics/390759596
发表于: 2014-04-14 18:26:09 c语言c++ 近期刚学到fseek函数,可是遇到了难题。用了fseek函数后,再<em>feof</em>函数判断文件结束。但是打死也判断走不出循环。搞得我脑袋都是大的。本来,fseek函数指到文件末尾的时候,<em>feof</em>函数就应该返回1.但是一直都是返回0.上网查了查资料(关于<em>问题</em>的资料不多)查了好久才查出来。下面我们就来做个实验,下面是源代码: #in
字符串匹配+分类(文本)
ffid = fopen('diagnosis.txt','r'); tline = fgetl(ffid); i = 1; <em>while</em> <em>feof</em>(ffid) == 0 tline1{i,1} = fgetl(ffid); i = i+1; end Yes = cell(2185,2); %% 如果匹配到CIN1-2或者CIN-1-2,CIN2...
很基本也很诡异的fread, feof
先看一段非常简单的程序:   #include &amp;lt;stdio.h&amp;gt; int main(int argc, char** argv) { char buf[8193]; FILE* fp = fopen(&quot;tmp.bin&quot;, &quot;wb+&quot;); fwrite(buf, 1, 8192, fp); fseek(fp, ...
文件末尾检测函数feof()
用于判断文件指针是否到达文件末尾,调用格式为: <em>feof</em>(fp); 比较坑的地方是使用此函数用于循环判断时,会多循环一次,这是由于当指针已经读完最后一个字符时,还不知道已经到达文件末尾,因此需要再循环一次。 解决的方法是先读取一次,再循坏!!!
linux C编程中EOF宏和feof函数的用法
在c语言中经常用EOF和<em>feof</em>()来判断文件的结束,现将有关用法总结如下: 定义 EOF是End Of File 的缩写,是c语言中标准库中定义的宏,定义为:#define  EOF  (-1);   <em>feof</em>() 用于测试流文件的结束,有宏和函数两种定义: 宏定义: #define <em>feof</em>(_stream)  ((_stream)->_flag & _IOEOF)
C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.
一、打开关闭文件 只打开文件   再关闭文件 #include #include main() { FILE *fp; fp = fopen("data.dat","r"); //打开文件 if(fp == NULL) { printf("Cannot open this file!\n "); exit(0); //头文件需要有 stdlib.h
C语言feof()函数用法.
<em>feof</em>()函数的意思是用来判断你读到了文件的外面. 而不是判断文件指针是否到达文件尾部(指向文件最后一个字符的后面). 如果在<em>while</em>表达式里直接用<em>feof</em>()判断是否到达文件尾,则结果总会多读一次. 下面是正确的写法. #include int main() { int c; FILE*file=fopen("test.txt","r"); <em>while</em>(1){ c=fg
feof函数多读一次问题解决方案
详细讲解了<em>feof</em>函数多读一次<em>问题</em>解决方案
C语言按行读取文件的正确使用:fgets、feof、ferror
转自 https://blog.csdn.net/yss28/article/details/53453959 一、fgets函数 原型 char *fgets(char *buf, int bufsize, FILE *stream); 功能 fgets函数用来从stream所指文件中读入bufsize-1个字符放入buf为起始地址的空间内;如果在未读满bufsize-1个字符之时...
真没劲啊,又上vb了。。。。
    说起来真是郁闷,为什么当初手一抖就选上vb了呢?我选什么不好,为什么偏偏选它啊!!!我吃饱了撑的么?    vb呀,本来么,我是不大讨厌你的,但是仅有的一点成见加上对教你的老师的无奈,我实在是忍不住讨厌你!!!    vb啊,你的执行效率不高也就罢了,为什么还要派来一个讲课效率不高的老师来教我?!    vb啊,你派的老师讲课效率不高也就算了,为什么英语讲得就好像是小学还没有毕
文件检测函数 feof, ferror,clearerr C库函数
文件检测函数 C语言中常用的文件检测函数有以下几个。 一、文件结束检测函数<em>feof</em>函数调用格式: <em>feof</em>(文件指针); 功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。 二、读写文件出错检测函数ferror函数调用格式: ferror(文件指针); 功能:检查文件在用各种输入输出函数进行读写时是否出错。 如ferror返回值为0表示未出错,否则表示有错。 三、文件出错标志和文件结束标志置0函数clearerr函数调用格式: clearerr(文件指针); 功能:本函数用于清除出错标
嵌入式Linux C编程学习之路(十四)——标准IO之feof,ferror,clearerr
1. 当返回错误时,怎样判读是已经到达文件结尾,还是读错呢?  a. int <em>feof</em>(FILE *stream); 功能:判断是否已经到文件结束 参数:文件流 返回值:到文件结束,返回为非0,没有则返回0 b.int ferror(FILE *stream); 功能:判断是否读写错误 参数:文件流   返回值:是读写错误,返回为非0,不是则返回0 c.void clearer...
文件结尾判断feof , EOF
查看 stdio.h 可以看到如下定义:   #define  EOF  (-1)   #define  _IOEOF  0x0010  #define  <em>feof</em>(_stream)  ((_stream)->_flag & _IOEOF)   由此可以看出,这两种方式的原理是不同的。   在这里先说下EOF和<em>feof</em>()这个两个宏定义,在我们学的课本中有这样的描述。 EOF是
feof fp 是什么意思
介绍c++builder语言<em>feof</em> fp 是什么意思
你是否真的会用C语言逐行读取文本文件中的串?(请不要栽倒在诡异的feof上)
之前说过诡异的<em>feof</em>, 也说过如何用C++逐行读取文本文件的串。但是,如果用C语言去做,就不那么简单了,尽管看似简单。下面是正确的程序,需要好好琢磨。我曾经在这个小<em>问题</em>上浪费不少时间,大家引以为戒。         直接上代码(读取的时候,忽略空行): #include #include int main() { char buf[100] = {0}; FILE *
feof函数介绍
函数名   <em>feof</em> 功 能   检测流上的文件结束符   The function <em>feof</em>() tests the end-of-file indicator for the stream   pointed to by stream, returning non-zero if it is set. The end-of-file   indi
C 库函数 feof(FILE*) 判断文件末尾的问题
C 库函数 <em>feof</em>(FILE*) 判断文件末尾的<em>问题</em> A Problem on Using C Library Function <em>feof</em>(FILE*) to Judge The End of A File 我用 C 写了一个程序读取 32768 字节大小的文件,每次读 16 个字节,应该是 2048 次读完。但结果读了 2049 次,并且最后两次的数据相同,似乎重复读取了最后 16
fsockopen,读返回数据不易采用feof函数
fsockopen,读返回数据不易采用<em>feof</em>函数 两天辛苦,得出一个结论:用<em>feof</em>函数判断读socket返回是否结束,是非常错误的做法。效率之低,耗时之久,实在让人忍无可忍。 写一断测试代码: [code=&quot;php&quot;] [/code] 输出结果: [code=&quot;html&quot;] 开始读 读之前:4.4822692871094E-5 读之后:0.00069689750671...
请问 while(!feof(stdin))是什么意思
stdin 是什么东西?? 他的值从哪里来的??? ,谢谢,麻烦说一下原理
feof函数多读一次问题分析
<em>feof</em>函数多读一次<em>问题</em>分析,详细讲解为什么会多读一次原因
while(!feof(fp))跳不出循环
[code=c]<em>while</em>(!<em>feof</em>(fp))rn rn for(i=0;fread(&Book[i],sizeof(struct Book),1,fp)!=0;i++)rn rn if(strlen(Book[i].name)!=0) rn rn rn printf("\t1.书名:%s\n",Book[i].name);rn printf("\t2.主编:%s\n",Book[i].writer);rn printf("\t3.出版社:%s\n",Book[i].press);rn printf("\t4.出版年:%s\n",Book[i].year);rn printf("\t5.版次:%s\n",Book[i].edition);rn printf("\t6.ISBN书号: %s\n",Book[i].isbn);rn printf("\t7.定价:%d\n",Book[i].price);rn printf("\t8.拥有本数:%d\n",Book[i].all);rn printf("\t9.借出本数:%d\n",Book[i].borrow);rn printf("\t10.现余本数:%d\n\n",Book[i].now); rn rn rn[/code]rnrn程序执行这段时跳不出循环,<em>while</em>(!<em>feof</em>(fp))不是文件指针到达末尾时就会跳出循环了吗,fread函数在for里面判断时是会被执行一次的吗?
C语言中的检测文件流是否结束的函数feof
函数名: <em>feof</em> 功  能: 检测流上的文件结束符 用  法: int <em>feof</em>(FILE *stream); <em>feof</em> - 程序例 #include int main(void) {    FILE *stream;    /* open a file for reading */    stream = fopen("DUMMY.FIL
利用feof()函数复制文件的C代码(解决复制后文件多一字符的问题
/*函数名: fprintf功 能: 传送格式化输出到一个流中用 法: int fprintf(FILE *stream, char *format[, argument,...]);程序例:*//* Program to create backup of theAUTOEXEC.BAT file */#include int main(void){FILE *in, *out;int x
feof()的问题
用来测试0字节文件并不是返回TURE,而是返回-1,WHY?
C语言中fgetc()函数的返回值意义
C语言fgetc()函数的返回值意义 学习C语言的,文件操作,大都会用到它。 它的函数原型: int fgetc(      FILE* stream  ); 这个函数的返回值,是返回读取的一个字节。如果读到文件末尾返回EOF。 EOF其实就是一个宏 #define EOF (-1) 表示-1. 既然返回的是一个字节,为什么返回值确用4字
文件尾判断 EOF feof()两种方式
查看 stdio.h 可以看到如下定义:   #define  EOF  (-1)   #define  _IOEOF  0x0010  #define  <em>feof</em>(_stream)  ((_stream)->_flag & _IOEOF)   由此可以看出,这两种方式的原理是不同的。   在这里先说下EOF和<em>feof</em>()这个两个宏定义,在我们学的
C++:fstream流的eof()函数多读一行的问题
<em>问题</em>: 在利用STL中fstream流读取txt文件的时候,往往需要使用eof()函数来判断是否读到文件末尾,但再调用eof()的时候往往会多输出最后一行的数据。 <em>while</em>(!readfile.eof()) { readfile.read(x,9);//readfile>>x; } 会出现将最后一行数据读两次。 eof是end of file的意思,用来判断是否到了文件结尾。
关于EOF(文件结束符)问题的体会
最近写了些代码,在对文件的操作中发现了很经典的EOF<em>问题</em>,呵呵。EOF,即end of file,文件结尾,作为文件结束的标志,在程序中常作为判断的一个标志。但在我们平常的程序中却常发生意想不到的结果。下面这段程序,猜猜它输出的是什么?char c;ifstream fin("d://dat");//设d:/dat文件已存在,内容为ab。<em>while</em>(!fin.eof()){    fin >> c
feof问题
[code=C/C++]rn#include rnusing namespace std;rnrnvoid main()rnrn FILE *fp=fopen("1.txt","wb");rn char ch[2];rn ch[0]='q';rn ch[1]='w';rn fwrite(&ch[0],1,1,fp);rn fwrite(&ch[1],1,1,fp);rnrn fseek(fp,0,SEEK_SET);rnrn fread(&ch[0],1,1,fp);rn <em>while</em>(!<em>feof</em>(fp))rn rn cout<
C语言-EOF和feof()判断文件结尾的区别
今天获取一个图片内容时, fopen(&quot;aaaaaa.png&quot;, &quot;r&quot;), 读取完文件头就停止了, 后来模式改为 &quot;rb&quot; 就可以了, 特此记录下;由于字符的ASCII码不可能出现 -1, 因此EOF定义为 -1 是合适的当以文本形式读取文件内容, 读入的字符值等于EOF时, 表示读入的已不是正常的字符而是文件结束符当以二进制形式读取文件内容, 信息都是以数值方式存在的, EOF的值可能就是所要...
ifstream(一)之 eof() 函数——解决读取文件最后一个数据多读一次的方法
原文 对于文件的操作中主要有几种,无非就是写入、读取罢了。 打开文件时,主要有几种模式 ios::in,ios::binary,ios::app,ios::trunc,ios::ate但并不是每种模式都是适用于ifstream 类的,我们也可以使用组合模式的方式来打开文件.   在读取文件时我们要特别注意一个函数 eof()该函数当文件指针到达文件尾时就返回为true,否则
wifidog 编译https通信、支持ssl加密、https通信
之前编译wifidog 用https通信时,遇到以下错误 1、首先在打开宏USE_CYASSL,在simple_http.h头文件定义 #define USE_CYASSL 2、在simple_http.c 文件包含自己的头文件,因为https接口函数都在此文件中 #include "simple_http.h" #ifdef USE_CYASSL #includ
fileno, stat, fstat以及struct stat结构体(获取文件详细信息)
fileno函数用于获取文件描述符,假设当前目录有1.txt, 2.txt, 3.txt, 则: #include int main( void ) { FILE *fp1 = fopen("1.txt", "r"); FILE *fp2 = fopen("2.txt", "r"); FILE *fp3 = fopen("3.txt", "r"); printf("%d
feof判断文件结束
fgets 是读取文件中的一行,当读文件过程中发生错误或者读到文件尾时,返回NULL,所以不能使用fgets==NULL来判断是否到了文件尾,需要结合<em>feof</em>(NULL) 才能确定是否到了文件尾 <em>while</em>(!<em>feof</em>(fp)) { fgets(temp,100,fp); Operation(temp); } 这种判断是否到了文件尾的方式在存在错误的,因为fgets函数是遇到回车‘\r...
关于EOF和feof()判断文件读到末尾
判断文件读取是否到了结尾有两种方式,一种是判断fgetc()是否返回EOF(即-1,一个宏定义);另一中是使用<em>feof</em>()函数判断,如果结束返回1,否则返回0; 第一种方式局限性很大,因为只有fgetc(),fscanf()遇到结束返回EOF,其他函数fgets()返回char*;另外用<em>while</em>((c = fgetc()) != EOF)也不安全,因为对于二进制非文本文件,这些文件在还没结束的
怎样选择合适的循环体(do&whilewhile和for)
我们都知道,循环体可以有五种,<em>while</em>、do <em>while</em>、for、goto和递归。 虽然理论上任何循环都可以用其他四种转换,但是因为goto在安全性以及在功能上能够被取代的特点,所以一般不会用到;而递归的特殊性和编写的困难性使递归的登场次数也完全很经常。那么,当我们需要用到循环的时候,在剩下的循环体中该如何进行选择呢?我们将讨论这几种循环体根本上的差异。 首先我们看下面这个例子:用for循环实
C语言feof()函数的使用
C语言<em>feof</em>()函数的使用 2009-11-24 21:55 正确的应该是<em>feof</em>返回0表示文件没有结束,返回1,表示结束。 <em>feof</em>实际观察的是上次读操作的内容,也就是上次读操作fread返回的值,如果读操作的返回值表明读取的不是空,那<em>feof</em>就返回0,如果上次读操作失败了,则<em>feof</em>返回1,表示读取完了。而fread返回值是表示正确读取的块数,如果不够,则返回0。那么我
简单的解决EOF多读取一行的问题
这个<em>问题</em>还是发生在VECTOR的应用过程中,我在用VECTOR进行数据读取时,发现多读了一行,虽然就目前我的小工具开发来言无上大雅,但是<em>问题</em>还是要解决,不然日后可能会成为一个大BUG也说不定呢。         首先,我还是问了度娘,我二姨夫还在我旁边煞有介事的看我解决<em>问题</em>的思路,我跟他说,百度!正在他不屑的时候,网页上直接弹出了解决EOF多读一行的<em>问题</em>哈哈,搜到了一位同行整理的这个<em>问题</em>的解决
EOF与feof()函数关系
在 C语言,或更精确地说成 C标准函式库中表示:文件结束符(end of file)。在<em>while</em>循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。   C语言中,当把数据以二进制形式存放到文件中时,就会有-
feof()和EOF的用法—— C语言中文件结尾的判断 (个人感觉写的挺深刻)
昨天突然被一位朋友问到了关于文件结尾的程序<em>问题</em>。在用<em>feof</em>()判断文件时,复制会多产生一个字符。   这个<em>问题</em>在大一的时候,老师上课就强调过,但那时只是模糊的记得个大概,记得这个函数如果用的不对就是会出现<em>问题</em>,解决是要先读一下,然后再判断,具体的什么还真实忘了。而且平常经常用的EOF,所以这个<em>问题</em>自己并没有一个特别好的概念。 现在写的C语言多了,应该能理解这个<em>问题</em>存
feof的原理及用法
一、<em>feof</em>()是什么? <em>feof</em>()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0 一般在文件操作,中经常使用<em>feof</em>()判断文件是否结束。 二、<em>feof</em>()的经典错误 根据这个函数的定义,一般大家都是这样使用的,但是这样使用,文件中无论是否有内容,都会被判断为“文件不为空”。 #include&amp;lt;stdio.h&amp;gt; int main(void) {    ...
feof函数
许多C语言初学者都发现,在使用<em>feof</em>函数判断文件指针是否到末尾时,常出现多读一个字符的<em>问题</em>。有初学者为避免此<em>问题</em>,先用fgetc()吸取字符,再以该字符是否为EOF(即返回值-1)来判断文件指针是否到末尾。但若二进制文件末正好出现-1,编译系统就无法辨别是否为结束标志。(文本文件中字符ASCII码不可能为-1,不会出现<em>问题</em>)   1.我们首先解释一下<em>feof</em>()多读字符的原因 假设现在文件
feof 函数在末尾的问题
<em>feof</em>(fp)有两个返回值:如果遇到文件结束,函数<em>feof</em>(fp)的值为非零值,否则为0。 EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0xFF(十进制为-1),因此可以用EOF作为文件结束标志。 当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进
C语言feof函数的一个简单示例
#include int main() { FILE* fp = NULL; char ch = NULL; fp = fopen("1.txt","r"); ch = fgetc(fp); <em>while</em>(!<em>feof</em>(fp)) { printf("%c\n",ch); ch = fgetc(fp); } fclose(fp); return 0; } 图一:
求助 linux下feof问题
这是我一个加密程序的代码。程序的功能是把in.txt中的内容进行加密然后输出到out.txt中。调用一个我写的函数加密rn以下是我的代码(加密函数部分略)。rnchar encrypt(char ch,int n);rnint main()rn int n;rn FILE*fin, *fout;rn scanf("%d", &n);rn if((fin = fopen("in.txt", "r")) == NULL)rn exit(0);rn if((fout = fopen("out.txt", "w")) == NULL)rn exit(1);rn <em>while</em>(!<em>feof</em>(fin))rn fputc(encrypt(fgetc(fin),n),fout);rn rn fclose(fin);rn fclose(fout);rnreturn 0;rnrnrn我在vc++6.0和dev— c++中跑都没有<em>问题</em>,但提交到我们学校的评测系统上就一个测试点也过不了,他用的是linux系统。rn后来我将<em>while</em>(!<em>feof</em>(fin))这句改为<em>while</em>((c = fgetc(fin)) != EOF)再提交就通过了所有测试点,后来查了一下说是<em>feof</em>是当作宏来用的,但linux中<em>feof</em>却实现为函数。rn那么请问linux下<em>feof</em>应该如何使用,我那么写为什么就出<em>问题</em>呢?rnps:由于测试平台不同我写好感觉没<em>问题</em>的程序有时提交上去会一个测试点也不能通过甚至编译不能通过死循环等等。那么请问linux下c编程和windows下到底还有哪些差别呢?rn初学编程,见笑于大方之家了。谢谢rn
feof()函数的问题
#include rn#include rnrnrn#define ave(s) (s->math+s->english+s->chinese)/3 //计算平均成绩rnrntypedef struct studentrnrn char term[7];rn char cla[5];rn char name[8];rnrn float math;rn float english;rn float chinese;rn float average;rn rnSTU;rnrnvoid write_in_file(STU *stu) //将成绩写入文件rnrn FILE *fp;rnrn if(( fp = fopen("stu_score.dat","a"))== NULL)rn rn printf("can't open file\n");rn exit(0);rn rn stu->average = ave(stu);rnrn fprintf(fp,"%-7s%-5s%-8s%-4.0f%-4.0f%-4.0f%-4.0f\n",stu->term,stu->cla,stu->name,stu->math,stu->english,stu->chinese,stu->average);rn fclose(fp);rn//每个学生的成绩占一行,如果这样加了'\n'的话是不是文件stu_score.dat中每个学生的信息 所占的字节大小就为(sizeof(STU)+1)?rnrnvoid print_cla(STU *stu) //输出学生成绩rnrn printf("%-8s%-6s%-9s%-5.0f%-5.0f%-5.0f%-5.0f\n", stu->term, stu->cla, stu->name,stu->math,stu->english,stu->chinese,stu->average);rnrnrnint main()rnrn rn FILE *fp;rnrn STU stu1 = "first","01","moon",98,97,96;rn STU stu2 = "first","02","zoon",95,94,33; rn STU stu3 = "sfirst","02","zed",90,17,96;rn STU stu4 = "sfirst","02","mzhao",98,95,94;rn STU *stu = (STU*) malloc(sizeof(STU));rnrn write_in_file(&stu1);rn write_in_file(&stu2);rn write_in_file(&stu3);rn write_in_file(&stu4);//对文件中写入4个学生的成绩信息rnrn if( (fp =fopen("stu_score.dat","r")) == NULL)rn rn printf("can't open file.\n");rn exit(0);rn rnrn <em>while</em>( !<em>feof</em>(fp))rn rn fscanf(fp,"%s%s%s%f%f%f%f",stu->term,stu->cla,stu->name,&stu->math,&stu->english,&stu->chinese,&stu->average);rn print_cla(stu);rn //循环读取文件信息并输出,因为<em>feof</em>()函数要读到文件最后一个字节的下一个位置才返回非零值所以循环了5遍,但是如果把"%s%s%s%f%f%f%f"改成"%s%s%s%f%f%f%f\n"rn 或是"%s%s%s%f%f%f%f "就只循环4遍,是为什么啊rnrn fclose(fp);rn return 0;rnrn
有关feof问题
[code=C/C++]<em>while</em>(1)rn s=fgets(s,10,fp);rn fprintf(fp2,"%s",s);rn if(<em>feof</em>(fp))break;rn [/code]rn这段代码不管用。好像<em>feof</em>不能判断文件尾。高人指点。
fseek()和feof()的问题。。
for(i=0;i); 用r打开的。
关于feof()的bug
前几天参加一个培训,听人说使用<em>feof</em>()作为判断文件结束的标志时要小心。当时我不以为然,<em>feof</em>, 这个函数我用过啊,没有发现什么bug?但回来后写了一个程序一试,果然有bug.我试着使用<em>feof</em>作为判定文件结束的标志来复制一个文件: <em>while</em> (!<em>feof</em>(fp_rd)){char t = fgetc(fp_rd);fputc(t, fp_wr);} 但当我打开复制后的文
feof函数说起
<em>feof</em>函数的产生:首先看stdio.h中关于EOF的定义:#define EOF (-1)在文本文件中,数据是以字符的ASCII代码值的形式存放,ASCII码的范围是0到255,不可能出现-1,因此可以用EOF作为文件结束标志。在二进制文件中,就可能会有-1值的出现,因此EOF就不能再作为二进制文件的结束标志,从而防止造成数据处理错误。为解决这一个<em>问题</em>,ANSI C提供一个<em>feof</em>函
feof()函数以及EOF
c 中的<em>feof</em>()函数以及EOF的用法和区别
Matlab大型文本文件行数方法
在工作中会有很多特殊的需要,比如我现在就遇到一个需要将大型的文本格式数据文件(比如5G)读取到MATLAB中,同时进行一定的处理。由于XP的内存是绝对没有办法将5G的数据一次性加载到工作空间的,此时一般我们是对数据进行分段处理,为了防止长时间等待,让用户以为是死机了,这个时候我们希望添加一个进度条告诉用户处理到什么地方了。但是我们必须先统计文件的行数,才能给出进度。   另外有些用户希
续:fsockopen,读返回数据不易采用feof函数
换另一种方式来读数据: [code=&quot;php&quot;] [/code] 结果: [code=&quot;html&quot;] 开始读head head读之前:0.00082898139953613 head读之后:0.00084185600280762 head读之前:0.00084590911865234 head读之后:0.00084781646728516 head读之前:0.0008509...
c语言拷贝文件程序
c语言文件操作实现拷贝一个文件。
【牛客网】C/C++牛客网专项刷题(03)
以下为牛客网C/C++专项刷题:   1、阅读以下程序,当输入数据的形式为12a345b789↙,正确的输出结果为()。 void main() { char c1,c2; int a1,a2; c1=getchar(); scanf(&quot;%2d&quot;,&amp;amp;a1); c2=getchar(); scanf(&quot;%3d&quot;,&amp;amp;a2); ...
有关使用feof()函数问题出现?问题
有关使用<em>feof</em>()函数<em>问题</em>:如将一个文件A的内容复制到另外一个文件B时,B文件的最后总会多一个ÿ,出现这总<em>问题</em>往往是代码<em>问题</em>,如:错误写法:int c;  <em>while</em>(!<em>feof</em>(in))  {  c = getc(in);  fputc(c,out);  }  很多教科书都是这么写的,这是是一个经典的错误。正确写法:int c;  c = g
feof()和EOF用法
查看 stdio.h 可以看到如下定义:   #define  EOF  (-1)   #define  _IOEOF  0x0010  #define  <em>feof</em>(_stream)  ((_stream)->_flag & _IOEOF)   由此可以看出,这两种方式的原理是不同的。   在这里先说下EOF和<em>feof</em>()这个两个宏定义,在我们学的
关于feof问题
目的:rn将一个文件里面的数据写入一个数组里面。rnrn#include rn#include rnrn#define MAX 20480rnchar des[MAX];rnint getstringfromfile(FILE *fp)rnrn char temp[10240];rn char ch;rn int i = 0;rn int j ;rn <em>while</em>(!<em>feof</em>(fp))rn rn fgets(temp,sizeof(temp),fp);rn j = 0;rn ch = temp[j];rn <em>while</em>(ch != '\0')rn rn des[i++] = ch;rn j++;rn ch = temp[j];rn rn rn des[i] = '\0';rn return 0;rnrnint main()rnrn FILE *fp;rn if((fp = fopen("1","rb")) == NULL)rn rn return -1;rn rn getstringfromfile(fp);rn printf("%s\n",des);rn return 0;rnrnrn1文件里面内容是323334353637rnrn然后结果输出是:rn323334353637rn323334353637rnrn为什么输出了两遍和输出了一个换行符。不懂?求解
关于feof()函数的问题
程序如下:rn=========================================rn/*文件复制*/rn#includern#includernrnint main(int argc,char *argv[])rn FILE *in,*out;rn char ch;rnrn if(argc!=3)rn printf("You forgot to enter a filename.\n");rn exit(1);rn rnrn if((in=fopen(argv[1],"rb"))==NULL)rn printf("Cannot open source file.\n");rn exit(1);rn rnrn if((out=fopen(argv[2],"wb"))==NULL)rn printf("Cannot open source file1.\n");rn exit(1);rn rnrn <em>while</em>(!<em>feof</em>(in))rn ch=getc(in);rn //if(!<em>feof</em>(in)) rn ^^^^^^^^^^^^^^^^^^^^rn putc(ch,out);rn rn fclose(in);rn fclose(out);rnrn return 0;rnrn==========================================rnint <em>feof</em>(FILE *fp)rn这个函数的作用是到达文件尾时返回真值rn照这样来说在<em>while</em>语句中就没有必要加if(!<em>feof</em>(in))这个语句也应该就正确了rn可是在删除这条语句之后在复制的文件中有一个乱码rn请指教一下这是为什么
feof()函数问题
如果到结尾了是不是输出0,没有就输出1
超级Java小游戏修正版下载
超级Java小游戏修正版.rar 相关下载链接:[url=//download.csdn.net/download/andyjiang2008/1971199?utm_source=bbsseo]//download.csdn.net/download/andyjiang2008/1971199?utm_source=bbsseo[/url]
C++ 运动会统计系统下载
课程设计..用Visual C++开发的 相关下载链接:[url=//download.csdn.net/download/apple_bbs/2007318?utm_source=bbsseo]//download.csdn.net/download/apple_bbs/2007318?utm_source=bbsseo[/url]
NordGroupInv-RealEUR下载
EUR DATABASENordGroupInv-RealEURNordGroupInv-RealEURNordGroupInv-RealEURNordGroupInv-RealEURNordGroupInv-RealEURNordGroupInv-RealEUR 相关下载链接:[url=//download.csdn.net/download/amanda8828/2449815?utm_source=bbsseo]//download.csdn.net/download/amanda8828/2449815?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 ios视频开发问题
我们是很有底线的