C语言fwrite实现整形数组写入文件,要求实现两种形式,比如:数组整个写入文件或逐个写入,要求测试通过

如题所述

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i;
int data[10];
FILE *fp1,*fp2;
if((fp1=fopen("data1.dat","at+"))==NULL)
{
printf("ERROR!!!\n");
return 1;
}
if((fp2=fopen("data2.dat","at+"))==NULL)
{
printf("ERROR!!!\n");
return 1;
}
srand(time(NULL));
for(i=0;i<10;i++)
{
data[i]=rand()%100;
printf("%-5d",data[i]);
fwrite(&data[i],sizeof(int),1,fp1);//逐个写入
}
fwrite(data,sizeof(int),10,fp2);//一块写入
printf("\n");
fclose(fp1);
fclose(fp2);
return 0;
}

追问

printf("%-5d",data[i]); 不拼装的话可行吗?是否写入失败?
fwrite(data,sizeof(data),1,fp2); 直接写入数组可以吗?不行的话,为什么?

追答

不拼装当然也可以写入了,不会写入失败。
还有,fwrite(data,sizeof(data),1,fp2); 可以直接写入一个数组,没有影响

追问

这段代码fwrite函数怎么也写不进去,请帮忙再看下!

追答

你的函数fwrite已经写进去了,你可以再写一个程序,用fread读取,发现可以读取写入的数据。另外,fscanf和fprintf是读取和写入文本文件,他俩一般对.txt文件使用。fread和fwrite是读取和写入二进制文件,他俩一般对应.dat文件使用。

追问

fprintf试过了,txt文件写入良好。

fwrite我改用dat文件,有些奇怪。
a.dat 以文本形式打开输入1 2 3 4 5,读入数组后,fwrite 此数组到b.dat ,打开b.dat为乱码,改为b.txt打开也是乱码,请问一下这种情况算不算成功写入了?写入的信息是否正确?

追答

用文本形式打开二进制文件必定会乱码,这是不可避免的。最好的判定是否写入成功的办法就是,用fread函数读取这个文件,然后输出到控制台,就可以知道是否写入成功。最好不要用文本形式打开二进制文件,然后输入数值,因为内部编码不一样,你看到的1 2 3 4,不一定就是他实际的1 2 3 4

追问

还是乱码。。。_(:з」∠)_ 

追答#include<string.h>
#include<stdio.h>

#define MAXSIZE 100
int main()
{
FILE *pf1,*pf2;
int szTmp[MAXSIZE];
int i=0;
int j=0;
if((pf1=fopen("b.txt","w+"))==NULL)
{
printf("The file a.txt is not exist!!!\n");
return 1;
}
memset(szTmp,0,sizeof(szTmp));
for(i=0;i<10;i++)
{
szTmp[i]=i;//对数组前十个数赋值
}
fwrite(szTmp,sizeof(int),10,pf1);//写入文件
fclose(pf1);
if((pf2=fopen("b.txt","r"))==NULL)//打开文件
{
printf("The file a.txt is not exist!!!\n");
return 1;
}
fread(&szTmp[10],sizeof(int),10,pf2);//读取文件,并把读取的值赋值给数组10到20个这10个元素
for(j=10;j<20;j++)
{
printf("%d\n",szTmp[j]);//输出
}
fclose(pf2);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答