你的意思是行的数据出现类型重复,而不是列的数据类型相同???这样的话用结构体是可以的,这样的结构体你需要定义4个不同大小的数组成员.你只要改一下缓冲区的大小和fread,fwrite的参数即可.每次读取一个结构体大小的数据块,这样也不错.以上代码我已经按你的意思修改了.你看看可以不?
#include
#define BUFF_LENGTH 520*(sizeof(char)+sizeof(int)+sizeof(float)+sizeof(double)) /*定义缓冲区大小,为各结构体成员数组所占空间的大小之和*/
typedef struct
{
char ch_D[520]; /*假设第一行数据类型为char型*/
int int_D[520]; /*假设第二行数据类型为int型*/
float flot_D[520]; /*假设第三行数据类型为float型*/
double doub_D[520]; /*假设第四行数据类型为double型.此后的数据类型重复以上四种类型.各种类型你可以修改*/
} *DataStruct;
void main()
{
FILE *fp_in,*fp_out; /*定义两个文件指针,一个用于从文件中读取数,另一个用于向另一个文件写入处理后的数据*/
char sourcefile[30],destination[30]; /*源文件,目的文件的路径及文件名*/
char buff[BUFF_LENGTH]; /*读入的数据放在内存中的位置*/
DataStruct buff; /*将缓冲区buff的结构改为结构体形式,也就是把buff格式化为所定义的结构体形式*/
puts("==>请输入您要读取的文件所在的路径和文件名!");
scanf("%s",sourcefile);
puts("==>请输入您要保存到的文件所在路径和文件名!");
scanf("%s",destination);
fp_out=fopen(sourcefile,"r"); /*打开文件,准备读内容*/
fp_in=fopen(destination,"a+"); /*打开文件,准备写入内容*/
if(fp_in==NULL||fp_out==NULL) /*检查是否打开错误*/
{
puts("打开文件出错,请检查您的输入");
return ;
}
while(!feof(fp_out)) /*只要要读的数据没有完,继续循环,直至读完*/
{
fread(buff,BUFF_LENGTH,1,fp_out); /*把数据读入缓冲区中*/
ProcessData(); /*这个函数的代码你自己写吧,不知道你要怎么样处理所读入的数据;如果你只是要读入数据的话,那么你只需要把buff的大小定义成足够大,然后用指针将地址递增就行就可以全部读入了*/
fwrite(buff,BUFF_LENGTH,1,fp_in); /*把修改过的缓冲区中的数据保存到另一个文件中*/
fflush(fp_in); /*立即写入*/
}
fclose(fp_out); /*关闭文件指针*/
fclose(fp_in);
puts("文件操作成功完成");
}
以上拙见,请高手指正.