fwrite和fread函数试验问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:22:06
以下程序为何执行后test.txt中的是乱码?而且我想要int i,long l,double d分别写入1,2,3遍,这个程序能否做到?如不能该如何办?为何下面程序中d的输出显示是一个非常长的数?
请高手指点!
#include <stdio.h> /* fwrite和fread函数 */
#include <stdlib.h> /* 我真的还很青涩 */
void main()
{
FILE *fp;
int i = 156;
long l = 9701076L;
double d = 3.456;

if((fp=fopen("D:\\weiw\\tc\\test.txt", "wb+"))==NULL)
{
printf("cannot open file.\n");
exit(0);
}

fwrite(&i, sizeof(int), 1, fp);
fwrite(&l, sizeof(long), 2, fp);
fwrite(&d, sizeof(double), 3, fp);

rewind(fp);

fread(&i, sizeof(int), 1, fp);
fread(&l, sizeof(long), 1, fp);
fread(&d, sizeof(double), 1, fp);

printf("i = %d\n", i);
printf("l = %ld\n", l);
printf("d = %f\n", d);

fclose(fp);
}
请解释。

1.fwrite()函数是以二进制方式写入数据的,而不是字符符(ASCII),所以用记事本打开后会有乱码

2.fwrite()函数中的第三个参数并不是”重复写入”,而是从第一个参数提供的地址开始,以第二个参数为单位读取数据的数量,在这个程序中,第三个参数的值应该为1.

3.”d是一个很长的数”的原因也是由第二点所提到的问题导致的.

4.要达到你的要求,最简便的方法是使用sprintf()函数.

wb+只能写文件,fread肯定不行

而且fwrite的时候第3个参数就是1啊,你用1,2,3干什么。

正确程序如下

#include <stdio.h> /* fwrite和fread函数 */
#include <stdlib.h> /* 我真的还很青涩 */
void main()
{
FILE *fp;
int i = 156;
long l = 9701076L;
double d = 3.456;

if((fp=fopen("C:/test.txt", "wb"))==NULL)
{
printf("cannot open file.\n");
exit(0);
}

fwrite(&i, sizeof(int), 1, fp);
fwrite(&l, sizeof(long), 1, fp);
fwrite(&d, sizeof(double), 1, fp);

fclose(fp);

if((fp=fopen("C:/test.txt", "rb"))==NULL)
{
printf("cannot open file.\n");
exit(0);
}