精华内容
下载资源
问答
  • C语言feof函数

    2019-09-05 23:09:02
    原型:int feof(FILE *_F) 功能:检测打开的流的“光标”指针是否到达文件末尾。 参数值:指向流的文件指针。 返回值:若到达文件尾部,返回0;否则返回非0值。 用法:例子: int main()//先建立要读取数据的文件,...

    原型:int feof(FILE *_F)
    功能:检测打开的流的“光标”指针是否到达文件末尾。
    参数值:指向流的文件指针。
    返回值:若到达文件尾部,返回0;否则返回非0值。
    例子:
    !!!注意,在执行这段代码时先建立文件并写入字符,因为要把这个文件的数据复制到另外一个文件

    int main()
    //这段代码新建一个文件infile(流in),并将out指向的文件复制到infile
    {
        FILE *in;
        FILE *out;
        char  ch,infile[100], outfile[100];
        printf("please input the file name you want to put something in:\n");
        scanf("%s",infile);
        if((in=fopen(infile,"w"))==NULL)
        {
            printf("cannot open this file!!!\n");
            exit(0);
        }
        printf("please input the file name you want to put something out from:\n");
        scanf("%s",outfile);
        if((out=fopen(outfile,"r"))==NULL)
        {
            printf("cannot open this file!!!\n");
            exit(0);
        }
        ch=getc(out);//把这一步写到循环外面,写到里面可能有错
        //int getc(FILE *_F)<=>int fgetc(FILE*)
        while(!feof(out))
        {
            putc(ch,in);
            putchar(ch);
            ch=fgetc(out);
        }
        putchar(10);
        fclose(in);
        fclose(out);
        return 0;
    
    }
        
    

    [ 暂时不研究的问题] 这个feof函数很值得研究,有论文说它并不是“读取了”非文件结束字符“返回0,读取了文件结束符后返回非0”

    展开全文
  • C语言:feof函数的坑

    2020-02-28 22:40:14
    目录引言feof()函数 引言 做课设的时候踩到这个坑,跟大家分享一下 feof()函数 看一下下面的代码 #include<stdio.h> int main() { FILE *fp = fopen("try", "w"); if (feof(fp) == 1) puts("文件已结束"); ...

    引言

    做课设的时候踩到这个坑,跟大家分享一下

    feof()函数

    看一下下面的代码

    #include<stdio.h>
    int main()
    {
    	FILE *fp = fopen("try", "w");
    	if (feof(fp) == 1)
    		puts("文件已结束");
    	else
    		puts("文件未结束");
    
    	return 0;
    }
    

    输出:文件未结束
    照理说,w参数打开的文件里面应该只有EOF才对啊,为什么会返回0呢?

    查阅资料后:

    feof函数
    检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值)

    int feof(FILE *stream);
    

    注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。

    原来出错的原因在这里,建议改成如下形式:

    #include<stdio.h>
    int main()
    {
    	FILE *fp = fopen("try", "w");
    	char temp[50];
    	if (fread(temp, sizeof(temp), 1, fp) != 1)
    		puts("文件已结束");
    	else
    		puts("文件未结束");
    
    	return 0;
    }
    

    输出:文件已结束
    直接利用读文件函数的返回值来判断是否到达结尾。

    展开全文
  • feof(fp_fopen)) { #if 1 fd_fread = fread(buff, sizeof(char), NUM_64K, fp_fopen); pri("fd_fread %d \n", fd_fread); #else while(surplus >= NUM_64K) { fd_fread = fread(buff, sizeof...

    如下程序:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include <sys/stat.h>
    
    typedef unsigned char BYTE;
    typedef unsigned int DWORD;
    typedef unsigned short WORD;
    
    #define NUM_64K  (64*1024)
    
    #define pri(fmt, ...) 	printf("["__FILE__"] <%s>_<%d> " ,__FUNCTION__,__LINE__ );\
    						printf(fmt, ##__VA_ARGS__);
    
    /* 获取文件大小 */
    unsigned long get_file_size(const char *path);
    
    int main()
    {
    	char file_name[256] = "/mnt/hgfs/Ubuntu12.04-share/test/2_file/test.mp4";
    
    	FILE *fp_fopen;
    	int fd_fread;
    
    	/* 剩余需要发送的字节数 */
    	DWORD surplus = -1;
    
    	/* 计算文件大小 */
    	unsigned long filesize = -1;
    
    	BYTE buff[NUM_64K];
    	memset(buff, 0, sizeof(buff));
    
    	if ((fp_fopen = fopen(file_name, "r"))== NULL )
    		{
    			pri("fpoen error ! \n");
    			return -1;
    		}
    
    	if ((filesize = get_file_size(file_name)) < 0 )
    		{
    			pri("filesize < 0 \n");
    			return -1;
    		}
    
    	surplus = filesize;
    
    	while (!feof(fp_fopen))
    		{
    
    #if 1
    			fd_fread = fread(buff, sizeof(char), NUM_64K, fp_fopen);
    			pri("fd_fread  %d \n", fd_fread);
    #else
    			while(surplus >= NUM_64K)
    				{
    					fd_fread = fread(buff, sizeof(char), NUM_64K, fp_fopen);
    					pri("fd_fread %d \n", fd_fread);
    					surplus = surplus - NUM_64K;
    				}
    			if((surplus < NUM_64K) &&(surplus > 0))
    				{
    					fd_fread = fread(buff, sizeof(char), surplus, fp_fopen);
    					pri("fd_fread %d \n", fd_fread);
    				}
    #endif
    		}
    	return 0;
    }
    
    unsigned long get_file_size(const char *path)
    {
    	unsigned long filesize = -1;
    	struct stat statbuff;
    	if(stat(path, &statbuff) < 0)
    		{
    			return filesize;
    		}
    	else
    		{
    			filesize = statbuff.st_size;
    		}
    	return filesize;
    }
    
    
    

    第52行 : #if 1
    运行结果:(最后几行打印)

    [test.c] <main>_<54> fd_fread  65536 
    [test.c] <main>_<54> fd_fread  65536 
    [test.c] <main>_<54> fd_fread  39701 
    root@ubuntu:/mnt/hgfs/Ubuntu12.04-share/test/2_file# 
    

    第52行 : #if 0
    运行结果:(最后几行打印)

    [test.c] <main>_<59> fd_fread 65536 
    [test.c] <main>_<59> fd_fread 65536 
    [test.c] <main>_<65> fd_fread 39701 
    [test.c] <main>_<65> fd_fread 0 
    root@ubuntu:/mnt/hgfs/Ubuntu12.04-share/test/2_file#
    

    最后多重复了一次。
    为了解决该问题,可以修改如下部分代码

    if((surplus < NUM_64K) &&(surplus > 0))
    				{
    					fd_fread = fread(buff, sizeof(char), surplus, fp_fopen);
    					if(!fd_fread)
    						break;
    					pri("fd_fread %d \n", fd_fread);
    				}
    

    再次编译运行结果为:

    [test.c] <main>_<59> fd_fread 65536 
    [test.c] <main>_<59> fd_fread 65536 
    [test.c] <main>_<67> fd_fread 39701 
    root@ubuntu:/mnt/hgfs/Ubuntu12.04-share/test/2_file#
    

    要注意fread返回值。

    以后写程序,也要善于运用函数返回值。

    参考链接:
    https://blog.csdn.net/do_fork/article/details/4753166

    该链接中,对该细节讲解很深刻。膜拜。

    展开全文
  • 这样会多读一个字符 ... printf("文件打开失败!"); exit(0); } while(!feof(fp)) { fscanf(fp, "%c", &num); printf("%c", num); } return 0; } 这样就不会多读 int main() { FILE * fp; char

    这样会多读一个字符

    int main()
    {
    	FILE * fp;
    	char num;
    	if((fp = fopen("表达式求值.txt", "r")) == NULL)
    	{
    		printf("文件打开失败!");
    		exit(0);
    	}
    	while(!feof(fp))
    	{
    		fscanf(fp, "%c", &num);
    		printf("%c", num);
    	}
    	return 0;
    }
    

    这样就不会多读

    int main()
    {
    	FILE * fp;
    	char num;
    	if((fp = fopen("表达式求值.txt", "r")) == NULL)
    	{
    		printf("文件打开失败!");
    		exit(0);
    	}
    	while(1)
    	{
    		fscanf(fp, "%c", &num);
    		printf("%c", num);
    		if(feof(fp)) break;
    	}
    	return 0;
    }
    
    展开全文
  • feof(fin)) { fscanf(fin, "%s", in1); printf("%s\n", in1); // check b = ifpalindromes(in1); if(b) { fprintf(palindromes, "%s\r\n", in1); } } ``` 这个是input文件 ![图片说明]...
  • 话不多说直接上代码 fseek(fp, 0L, SEEK_END);//文件指针置于结尾 long __cdecl len1 = ftell(fp);//获取结尾指针值 fseek(fp, 0L, SEEK_SET);//文件指针至于开头 ...feof(fp)) // { // } ...
  • c语言文件中EOF和feof

    千次阅读 2013-03-18 15:42:38
    C语言文件操作解析(五)  在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符。但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特别是在判断文件是否到达文件末尾时,...
  • 关于C语言feof()函数判断文件结尾的问题分析

    千次阅读 多人点赞 2017-12-04 01:12:42
    相信很多C语言初学者都遇到过这种情况: 使用 while(!feof(fp)) { fscanf(...);...读文件时经常会重复读最后一段字符。...只有当文件位置指针指向文件末尾,再发生读/写操作,然后再调用feof()时,才会得到...
  • #include #include int main() { FILE *fp; char ch; fp=fopen("./tmp/text2.txt","r"); ch=fgetc(fp);...// 函数feod(fp):当前位置指针指向文件末尾时返回0,返回非零值 while(!feof(fp))// { p
  • 最近一个大一的朋友找我说是不会c语言文件读写,我就想着给他写个demo,没想到却遇到了一个问题(之前也遇到过,但是没有记录下来,现在居然错了第二次了,所以现在记录下来)。 问题 用feof来作为循环控制条件时...
  • 查了一下文件系统的函数,使用fscanf和feof就可以搞定这个小程序。 feof 函数原型:feof(FILE *stream); 判断文件结尾,结尾返回非零值,否则返回零值。 fscanf 函数原型:int fscanf (FILE *stream, char *forma...
  • C语言中的feof函数

    2018-09-07 01:22:21
    函数名  feof 功 能 检测流上的文件结束符 用 法 int feof(FILE *stream); 程序例 #include include include
  • 最近做开发的时候用到c语言文件的读写函数fread(),采用while(!feof(fp))来控制循环,结果发现每次读取数据的时候总会把最后一个数据单元读取两次,很是不解。 后来查找资料发现,原来fread()在读到文件最后一个...
  • 正如前面所讲,fgetc(或者getc)函数返回 EOF 并不一定就表示文件结束,读取文件出错时也会返回 EOF。...也正因为如此,我们需要使用 feof 函数来替换 EOF 宏检测文件是否结束。当然,在用 feof ...
  • C语言feof()函数的使用

    千次阅读 2011-12-20 13:13:33
    C语言feof()函数的使用 2009-11-24 21:55 正确的应该是feof返回0表示文件没有结束,返回1,表示结束。 feof实际观察的是上次读操作的内容,也就是上次读操作fread返回的值,如果读操作的返回值表明读取的...
  • 在使用C语言来对文件操作的时候,我们经常使用一些feof、fgetc函数,但是在使用的过程中也会遇到一些小问题。 问题 在今天编写C语言时候,我写了如下一段代码: #include <stdio.h> int main(){ FILE *fp = ...
  • C 库函数 - feof()描述C 库函数 int feof(FILE *stream) 测试给定流 stream 的文件结束标识符。声明下面是 feof() 函数的声明。int feof(FILE *stream)参数stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了...
  • c语言文件练习

    2018-12-24 00:08:28
    c语言文件处理:C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的读写...
  • 这些函数都是和文件读写时发生错误有关,下面一一分析: 1:ferror 原型:int ferror(FILE * fp) 作用:测试一个文件流是否被设置了错误标识符,如果是返回非 0 整数,否则返回 0。 例子: short ch; FILE *...
  • C语言feof()函数用法.

    千次阅读 2013-01-03 12:31:04
    feof()函数的意思是用来判断你读到了文件的外面. 而不是判断文件指针是否到达文件尾部(指向文件最后一个字符的后面). 如果在while表达式里直接用feof()判断是否到达文件尾,则结果总会多读一次. 下面是正确的写法....
  • C语言文件

    2019-12-25 16:11:40
    feof函数负责判断文件指针是否移动到文件尾;fgetc函数与fputc函数是单个字符读写函数,能够从文件中读取、写入单个字符,同时文件指针会自动向后移一个字节;fgets函数与fputs函数是字符串的读写函数,能...
  • c编程 创建文件,向文件写入内容,插入内容,读取文件内容, 使用函数: fopen, fclose, fputc, fgetc, feof
  • C语言中关于feof的使用问题

    千次阅读 2019-08-20 11:45:30
    当你想读取文本文件的全部内容时,却发现容易出现奇怪的现象或者最后一行重复读取?细心看完这篇你就知道为什么了。 1.先来看一个简单的例子: 文本文件"test.txt"内容如下: 123 只有’123’三个字符。现在我们用一...
  • 121.为什么用feof()读取文件,结果最后总是多读些东西 C语言中,用feof()读取文件,遇到EOF标识符结束,而EOF要被读取
  • c语言文件

    2020-05-18 18:04:31
    1.打开当前目录下名叫“data.in.txt”的文件 FILE *fp=fopen("data.in.txt","r");//如果打开了的话,返回一个指针 r为只读的打开方式,不存则返回NULL ...feof(fp))//读取所有字符的方式,指针会自
  • C语言中我们谈的文件有两种**:程序文件和数据文件。** 程序文件 :包括源文件(.c),目标文件(windows环境是.obj),可执行文件(windows环境是.exe) 数据文件 :是程序运行时读写的数据,比如程序运行时需要从中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 563
精华内容 225
关键字:

c语言文件feof

c语言 订阅