精华内容
下载资源
问答
  • 话不多说直接上代码 fseek(fp, 0L, SEEK_END);//文件指针置于结尾 long __cdecl len1 = ftell(fp);//获取结尾指针值 fseek(fp, 0L, SEEK_SET);//文件指针至于开头 ...feof(fp)) // { // } ...

    话不多说直接上代码

    	fseek(fp, 0L, SEEK_END);//文件指针置于结尾
    	long __cdecl len1 = ftell(fp);//获取结尾指针值
    	fseek(fp, 0L, SEEK_SET);//文件指针至于开头
    	long __cdecl len2 = ftell(fp);//获取开头指针值
    	while(len2 != len1)//循环判断
    	{
    		len2 = ftell(fp);
    	}
    //	while (!feof(fp))
    //	{
    	
    
    //	}
    
    展开全文
  • 在使用C语言来对文件操作的时候,我们经常使用一些feof、fgetc函数,但是在使用的过程中也会遇到一些小问题。 问题 在今天编写C语言时候,我写了如下一段代码: #include <stdio.h> int main(){ FILE *fp = ...

    C语言中关于feof函数&fgetc函数一些理解

    前言

    在使用C语言来对文件操作的时候,我们经常使用一些feof、fgetc函数,但是在使用的过程中也会遇到一些小问题。

    问题

    在今天编写C语言时候,我写了如下一段代码:

    #include <stdio.h>
    
    int main(){
        FILE *fp = fopen("code.txt","r");
        if (fp != NULL)
        {
            while (!feof(fp))
            {
                printf("%c",fgetc(fp));
            }
        }
        else
            printf("fail to open!");
        fclose(fp);
        return 0;
    }
    

    code.txt:

    if else then a1 abc 22
    

    看上去貌似没什么问题,这是一段输出code.txt文件内所有字符的一个小程序。
    我来用图片指出一下实际出现的问题:

    可以看到输出的结果比txt文件的字符多出了一个?
    可以看到,程序输出的结果比txt文件的字符多出了一个?符号。

    解决

    经过查阅相关资料发现,fgetc函数在,传入参数fp到达文件末尾的时候,会返回一个EOF,这个EOF的实值是-1。
    那么会不会是fgetc函数多输出了一遍呢?循环到达文件末尾没有停止,而是把最后的EOF也输出了?
    我添加了两行代码,实验了一下:

    #include <stdio.h>
    
    int main(){
        FILE *fp = fopen("code.txt","r");
        putchar(-1);
        printf("\n");
        if (fp != NULL)
        {
            while (!feof(fp))
            {
                printf("%c",fgetc(fp));
            }
    
        }
        else
            printf("fail to open!");
        fclose(fp);
        return 0;
    }
    

    结果果然:
    -1的结果就是这个?符号
    -1 的输出结果果然就是这个?符号,也就是说,循环多走了一遍,才结束,导致EOF被当作字符输出了。
    在查阅相关资料后得到如下的经验:

    feof函数的判断方法不是判断当前指针是否指向文件末尾,而是根据上一次读取的返回值进行判断,如果上一次读取的返回值为EOF,那么feof(fp)为真,否则为假。

    而fgetc函数的方法刚好是:先读取当前指针指向的内容,再让指针向后移。

    这样一来,刚好,如果两者放在一起操作,就会发生多读一个EOF的现象:
    getc在读到txt文档最后一个字符的时候,fp指向最后一个字符,读出字符后,fp向后移,fp指向EOF,进行下一次循环,feof判断是否到达文档末尾:由于上一次fgetc读出的是文档最后一个字符,所以即使fp当前已经指向了EOF,feof函数还是会返回假,这样循环就又继续了,下一次循环中,就会将fp指向的EOF输出,fp后移(已经到达文档尾,无法后移);

    所以,我将代码改为了这种:

    #include <stdio.h>
    
    int main(){
        FILE *fp = fopen("code.txt","r");
        if (fp != NULL)
        {
            char ch = fgetc(fp);
            while (!feof(fp))
            {
                putchar(ch);
                ch = fgetc(fp);
            }
    
        }
        else
            printf("fail to open!");
        fclose(fp);
        return 0;
    }
    

    输出结果就是正常的:
    在这里插入图片描述

    展开全文
  • 之前做的一个项目需要读取一个文件中的数据,文件中的数据类型确定,大小不确定,每次读取文件要计算出文件大小并传送给下位机。查了一下文件系统的函数,使用fscanf和feof就可以搞定这个小程序。 feof 函数原型:...

    之前做的一个项目需要读取一个文件中的数据,文件中的数据类型确定,大小不确定,每次读取完文件要计算出文件大小并传送给下位机。查了一下文件系统的函数,使用fscanf和feof就可以搞定这个小程序。

    feof

    函数原型:feof(FILE *stream);
    判断文件结尾,结尾返回非零值,否则返回零值。

    fscanf

    函数原型:int fscanf (FILE *stream, char *format ,…);
    从流 stream 读取格式化输入。

    例子:

    	float* Array= (float*)malloc(sizeof(float));//分配动态内存
    	unsigned int uiNum = 0;//记录文件大小
    	FILE* fid;//创建文件指针
    	if((fid = fopen("C:\\data.txt","rb")) == NULL)//打开文件
    		{
    			printf("File open False!");
    			exit(-1);
    		}
    	while(!feof(fid))//判断文件结尾
    		fscanf(fid,"%f",Array+(uiNum++));//每次读取一个浮点数据,指针自动指向下一个数据
    	fclose(fid);//关闭文件
    

    需要注意的是如果文件结尾有空格,则最后一个数据是空格,空格后判断到结尾,返回非零值,这会导致计数值比实际数据个数大一个。例如有三个数,如果最后一个数后面跟着一个空格,uiNum=3+1=4;如果没空格,则uiNum=3;

    展开全文
  • stdio.h定义的好像就是#define EOF -1,那返回的到底是什么?课本说返回的是非零,但考试题上没这个选项啊。。。求解
  • C语言读取文件流的相关函数用法简介C语言fread()函数:读文件函数(从文件流读取数据)头文件:#include 定义函数:size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);函数说明:fread()用来从文件...

    C语言读取文件流的相关函数用法简介

    C语言fread()函数:读文件函数(从文件流读取数据)

    头文件:

    #include

    定义函数:

    size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);

    函数说明:fread()用来从文件流中读取数据.

    参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值比参数nmemb 来得小, 则代表可能读到了文件的尾或有错误发生, 这时必须用feof()或ferror()来决定发生什么情况.

    返回值:返回实际读取到的nmemb 数目。

    范例

    #include

    #define nmemb 3

    struct test

    {

    char name[20];

    int size;

    } s[nmemb];

    main()

    {

    FILE * stream;

    int i;

    stream = fopen("/tmp/fwrite", "r");

    fread(s, sizeof(struct test), nmemb, stream);

    fclose(stream);

    for(i = 0; i < nmemb; i++)

    printf("name[%d]=%-20s:size[%d]=%d\n", i, s[i].name, i, s[i].size);

    }

    执行

    name[0]=Linux! size[0]=6

    name[1]=FreeBSD! size[1]=8

    name[2]=Windows2000 size[2]=11

    C语言feof()函数:检查文件流是否读到了文件尾头文件:

    #include

    定义函数:

    int feof(FILE * stream);

    函数说明:feof()用来侦测是否读取到了文件尾, 尾数stream 为fopen()所返回之文件指针. 如果已到文件尾则返回非零值, 其他情况返回0.

    返回值:返回非零值代表已到达文件尾.

    时间: 2015-08-29

    1.建文件夹 int _mkdir(const char *path,mode_t mode); 函数名: _mkdir 功 能: 建立一个目录 用 法: int _mkdir( const char *dirname ); 头文件库:direct.h 返回值:创建一个目录,若成功则返回0,否则返回-1 ===================================================== 2.打开文件fopen() 函数功能: 打开一个文件 函数原型:FILE * fope

    C语言creat()函数:创建文件函数 头文件: #include #include #include 定义函数: int creat(const char * pathname, mode_tmode); 函数说明: 1.参数 pathname 指向欲建立的文件路径字符串. 2.Creat()相当于使用下列的调用方式调用open()     open(const char * pathname,

    C语言read()函数:读文件函数(由已打开的文件读取数据) 头文件: #include 定义函数: ssize_t read(int fd, void * buf, size_t count); 函数说明:read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动.

    C语言getgrent()函数:从组文件中取得账号的数据 头文件: #include #include 定义函数: struct group * getgrent(void); 函数说明:getgrent()用来从组文件(/etc/group)中读取一项组数据, 该数据以group 结构返回. 第一次调用时会取得第一项组数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. struct group { char *

    fgets() 有局限性,每次最多只能从文件中读取一行内容,因为 fgets 遇到换行符就结束读取.如果希望读取多行内容,需要使用 fread 函数:相应地写入函数为 fwrite. fread() 函数用来从指定文件中读取块数据.所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制.fread() 的原型为: size_t fread ( void *ptr, size_t size, size_t count, FILE *fp ); fwri

    C语言link()函数:建立文件连接 头文件: #include 定义函数: int link (const char * oldpath, const char * newpath); 函数说明:link()以参数newpath 指定的名称来建立一个新的连接(硬连接)到参数oldpath 所指定的已存在文件. 如果参数newpath 指定的名称为一已存在的文件则不会建立连接. 返回值:成功则返回0, 失败返回-1, 错误原因存于errno. 附加说明:link()所建立

    C语言stat()函数:获取文件状态 头文件: #include #include 定义函数: int stat(const char * file_name, struct stat *buf); 函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中. 下面是struct stat 内各参数的说明: struct stat { dev_t st_dev; //device 文件的设备编

    C语言getpid()函数:获取进程识别码 头文件: #include 定义函数: pid_t getpid(void); 函数说明:getpid ()用来取得目前进程的进程识别码,许多程序利用取到的此值来建立临时文件, 以避免临时文件相同带来的问题. 返回值:目前进程的进程识别码 范例 #include main() { printf("pid=%d\n", getpid()); } 执行: pid=1494 /*每

    C语言getcwd()函数:取得当前的工作目录 头文件: #include 定义函数: char * getcwd(char * buf, size_t size); 函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小. 注: 1.在调用此函数时,buf 所指的内存空间要足够大.若工作目录绝对路径的字符串长度超过参数size 大小,则返回NULL,errno 的值则为ERANGE. 2.倘若参数buf

    方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworking.py'] 方法2: import os print(os.getcwd()) print(os.listdir()) print(os.path.join(os.getcwd(),os.listdir()[1])) D:\pycharm\PracticeProject ['.idea', 'C

    展开全文
  • C语言中关于feof的使用问题

    千次阅读 2019-08-20 11:45:30
    当你想读取文本文件的全部内容时,却发现容易出现奇怪的现象或者最后一行重复读取?细心看完这篇你就知道为什么了。 1.先来看一个简单的例子: 文本文件"test.txt"内容如下: 123 只有’123’三个字符。现在我们用一...
  • C语言读写文件两种方式BXC中处理Offline程序用的读,写文件较多,但自己一般用的读一行(fgetws,fgets)一来处理,这个是文件文件的一行,fgetws是以OD为一行的尾,fgets是以OA为一行的尾。其实可以一下子把文件的所有...
  • 121.为什么用feof()读取文件,结果最后总是多读些东西 C语言中,用feof()读取文件,遇到EOF标识符结束,而EOF要被读取
  • C语言中的feof函数

    万次阅读 多人点赞 2012-05-07 10:36:44
     检测流上的文件结束符 用 法  int feof(FILE *stream); 程序例  #include stdio.h>  int main(void)  {  FILE *stream;  /* open a file for reading *
  • C语言专项试题 文件一、填空题1....3. C程序中对普通文件进行读写操作,必须先 ,操作后再 。4. 在C语言中,文件操作都是由标准库函数来完成的,对应的头文件是 。5. 用 方式打开一个文件时,该...
  • 目录c语言读写文件的各种操作fopen() -- 打开文件fclose() -- 关闭文件fgetc() -- 读取一个字符fputc() -- 写入一个字符fgets() -- 读取一行fputs() -- 写入字符串到文件fread() -- 从文件读取指定大小的数据到数组...
  • 各种格式的文件用什么软件打开.$$$TemporaryFile)Q7?...{9f4f.$$FOS/2Database用c语言如何读入并使文本文件按某一列排序输出?你可以酱紫: # include int main(void){ FILE *p;//文件指针 char ch[1000];/...
  • C语言读写文件

    千次阅读 2019-06-10 15:37:03
    C读写文件 使用 fopen(文件名,访问模式) 函数来打开文件,一般有getc/putc , fgets/fputs , fscanf/fprintf , fread/fwrite 四大家族来读写文件。 关于文件访问模式有如下的选择: 访问模式 说明 r 以只读...
  • 主要介绍了C语言读取文件流的相关函数用法简介,包括fread()函数和feof()函数的使用,需要的朋友可以参考下
  • 初识C语言时,对文件输入输出模块并没有仔细去看,大致浏览了一遍就这样翻过去了 因为考试也不考,所以何必费那些闲工夫啊! 现在看来,C语言文件输入输出模块对于一名程序员来说是非常有用的东西,没有这些,所有...
  • C语言读取文件

    2016-10-20 10:53:04
    C语言中操作文件的库函数是io.h,完成对文件的输入,输出,并带有不同的读写模式。由于在读写文件时,对整型,字符一视同仁,所以可以用同一种处理来进行。
  • fseek函数函数原型:int fseek...有如下三种值可选:SEEK_SET 从距文件开头offset 位移量为新的读写位置.SEEK_CUR 以目前的读写位置往后增加offset 个位移量.SEEK_END 将读写位置指向文件尾后再增加offset 个位移量...
  • 【C语言】C语言读取文本文件

    万次阅读 多人点赞 2019-01-28 20:44:26
    文章目录【C语言】C语言读取文本文件一 前言二 按字符读取文本文件1、程序实现一2、程序实现二三、按行读取文本文件1、程序实现一2、程序实现二四、说明 【C语言】C语言读取文本文件 一 前言 &amp;amp;amp;nbsp;...
  • 非标准文件读写 不带缓冲的1.文件的打开和关闭open()函数的作用是打开文件,其调用格式为: int open(char *filename, int access); 该函数表示按access的要求打开名为filename的文件,返回值为文件描述字,其中acc...
  • c语言 判断文件结束问题 feof()

    千次阅读 2013-06-26 19:49:13
    最近做开发的时候用到c语言文件读写函数fread(),采用while(!feof(fp))来控制循环,结果发现每次读取数据的时候总会把最后一个数据单元读取两次,很是不解。  后来查找资料发现,原来fread()在读到文件最后一个...
  • 关于C语言读取文件时候多读一行

    千次阅读 2019-03-12 16:17:08
    关于C语言读取文件时候多读一行 梗概:为什么C语言读取文件到结构体时为什么整天多读一行?一切都是【!feof(fp)】的错!!! while (!feof(fp)) { fgets(buffer, 256, fp); j++; } 像这样的代码,是很多...
  • C语言提供了多个用于文件读写的标准函数。文件打开后,就可以将“文件指针”作为函数的参数对文件进行读写操作。1.以字符形式读写文件1) 字符读取函数 fgetc( )fgetc(文件指针); //从“文件指针”所指向的文件读取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,033
精华内容 3,213
关键字:

c语言读取文件feof

c语言 订阅