fread函数的用法

fread函数怎么从文件中读出一个整数?
看下面的一个例子,为什么会有错误?
#include <stdio.h>

int main()
{
FILE * fp;
int a;

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

fread(&a,sizeof(int),1,fp);

printf("a is %d\n\n",a);

return 0;
}
附加的文件1.txt中只有一个整数,如45,但运行后得到的结果却不能显示这个数,why?
按二楼提供的代码改了一下,还是不能正确显示出b is 45,why?
还有一点,我现在是想先手工往文件中输入一些数据,然后在程序中将其读出,用于测试程序的正确性,避免每次都从键盘输入。fread函数不能做到这一点吗?
#include <stdio.h>

int main()
{
FILE * fp;
int a=45;
int b;

fp=fopen("1.txt","wb+");

fwrite(&a,sizeof(int),1,fp);///将a值写到文件中

fread(&b,sizeof(int),1,fp);

printf("b is %d\n\n",b);

fclose(fp);

return 0;
}

fread函数可从文件中读取二进制数据

语法:

A = fread(fid, count)

A = fread(fid, count, precision)

其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。

例子:

fid = fopen('alphabet.txt', 'r');
c = fread(fid, 5)'
c =
65 66 67 68 69
fclose(fid);

程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。

扩展资料:

用 法

int feof(FILE *stream);

参数

流 :FILE结构的指针 

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

参考资料:

fread--百度百科

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-13
在文本文件(这个txt文件)中,45是以字符串形式保存的,也就是说,实际上保存的是45这两个字符的ASCII值,也就是0x34和0x35,也就是十进制数字52和53,而fread()又是一个二进制读取函数,所以用它读取的数值就是这两个数值。

要想读取出45这个数字,应该用fscanf()函数。
第2个回答  推荐于2017-09-23
#include <stdio.h>

int main()
{
FILE * fp;
int a=45;
int b;

fp=fopen("1.txt","wb+");

fwrite(&a,sizeof(int),1,fp);///将a值写到文件中.这句起作用,移动了文件指针。
fseek(fp,0,0);//将文件指针移回首部
fread(&b,sizeof(int),1,fp);

printf("b is %d\n\n",b);

fclose(fp);

return 0;
}本回答被提问者采纳
第3个回答  2010-05-13
fread读的是二进制的数据,你在文件里如果直接键盘敲的45,是不能正确读出来的。
试试先把一个int型数据fwrite进文件里,再用fread读出来.
第4个回答  2010-05-13
你读的是4个ASC码,当然不对,先读到字符串中,再变int
相似回答