首页技术fclose的返回值?fopen fclose

fclose的返回值?fopen fclose

编程之家2026-06-07890次浏览

大家好,今天来为大家解答fclose的返回值这个问题的一些问题点,包括fopen fclose也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

fclose的返回值?fopen fclose

c语言fread()返回总是0

1、返回0通常是读到了文件尾。如果确认没有到文件尾,可以用ferror检查错误。

if( ferror( fp)){

printf("File read error.");

}

2、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

函数原型:size_t fread( void*buffer, size_t size, size_t count, FILE*stream);

fclose的返回值?fopen fclose

参数:

buffer用于接收数据的内存地址

size要读的每个数据项的字节数,单位是字节

count要读数据项的个数,每个数据项size个字节.

stream输入流的指针

返回值:

fclose的返回值?fopen fclose

返回实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。

实例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

FILE*stream;

charmsg[]="thisisatest";

charbuf[20];

if((stream=fopen("DUMMY.FIL","w+"))==NULL)

{

fprintf(stderr,"Cannotopenoutputfile.

");

return0;

}

fwrite(msg,1,strlen(msg)+1,stream);

fseek(stream,0,SEEK_SET);

fread(buf,strlen(msg)+1,1,stream);

printf("%s

",buf);

fclose(stream);

return0;

}

C语言中fread的一些疑问

L_o_o_n_i_e回答得不怎么准确!

我帮你解释下:

首先介绍fread函数

功能:从一个流中读数据

函数原型: int fread(void*ptr, int size, int nitems, FILE*stream);参数:用于接收数据的地址(指针)(ptr)

单个元素的大小(size):单位是字节而不是位,例如读取一个整数值就是4元素个数(nitems)

提供数据的文件指针(stream)

返回值:成功读取的元素个数

由上面介绍知道fread函数的第一个参数是个指针变量,可以指向任意类型实参!

严归正传,对于你这里的问题,你代码中的s是个结构体数组变量,跟普通数组变量一样,数组名本身就是个指针常量,所以在buffer位置写成s是没有问题的。

那么为什么你这里读会变乱码呢?

虽然你帖的代码并没有全,但从你说的读取是乱码,我大概猜到在你用fwrite函数把数据写进文件的时候是以每次一个结构体大小(也就是仅仅是数组s的一个元素而已,也就对应一个下标而已)和一个数据块的方式写进文件里的。所以当你用fread函数读取的时候,假设你在buffer位置写成s,本身语法是没有问题的,但是就相当于你把数组s的仅一个元素的数据大小当成所有s的数据存到s中,也就是没有对应起来,所以显示会是乱码。

所以你可以有两种方式实现:

方式一:

在写的时候按一次以s的一个元素的数据大小作为一个数据块依次写进文件,然后读取时候也以同样方式读出来。

代码可以这么写:

假设s的大小为:SIZE_S

for(count= 0; count< SIZE_S; count++)

fwrite(&s[count], sizeof(struct student), 1, fp);

然后读取时:

for(count= 0; count< SIZE_S; count++)

fread(&s[count], sizeof(struct student), 1, fp);

方式二:

以整个数组s的数据大小作为一个数据块一次写进文件,然后读取时也同样全部读出来,最后可以以循环的方式打印出来。

代码实现如下:

假设s的大小为:SIZE_S

fwrite(s, SIZE_S* sizeof(struct student), 1, fp);

然后读取时:

fread(s, SIZE_S* sizeof(struct student), 1, fp);

最后打印:

for(count= 0; count< SIZE_S; count++)

fread(&s[count], sizeof(struct student), 1, fp);

明白了记得给哥哥顶下~~~ ^_^

fscanf函数的用法

用法:int fscanf(FILE*stream,char*format,[argument...]);解析:int fscanf(文件指针,格式字符串,输入列表);返回值:类型是整型,成功读入的参数的个数。新建data.txt文件,存入3组坐标,运行程序并输出结果。

fscanf函数的用法 fscanf第一个参数需要一个文件指针,为了查看实验效果,这里先新建一个名为test.txt的文本文件,放在源代码的文件夹,输入如下内容:

123

123.456

Hello world!

要对文件操作,必须将该文件打开:

fp= fopen("test.txt","r");

同时使用完毕后不要忘记使用fclose关闭文件。

test.txt第一行保存的是一个整数,所以可以使用fscanf先读取一个整数:

fscanf(fp,"%d",&num);

test.txt第二行保存了一个浮点数,按照浮点数的格式进行读取:

fscanf(fp,"%f",&fNum);

需要注意的是,由于浮点数位于第二行,所以要想读取这个浮点数,应当先把第一个数读完,否则读取的回事123.000000

同样可以使用类似的方法读取位于第三行的字符串:

fscanf(fp,"%s", str);

但是,从程序的运行结果发现,第三行存储的是Hello world!,而实际运行结果只有“Hello”,这表明fscanf遇到空格会终止本次读操作。

当将fscanf第一个参数设定为stdin时,将实现和scanf函数相同的效果:

fp= stdin;//设置fp为标准输入

fscanf(fp,"%d",&num);//从fp读取一个整数

好了,关于fclose的返回值和fopen fclose的问题到这里结束啦,希望可以解决您的问题哈!

网页设计html软件(HTML+CSS网页设计与制作)windows程序设计第五版?C程序设计 第五版