我有一个这种格式的文件:
0.4
0.3
0.2
0.4
我需要使用以下格式创建一个新文件:
1 2
0.4 1 0
0.5 1 0
0.3 0 1
...
我写了这个函数
void adapta_fichero_serie(char file_input[50],char file_output[50], int np)
{
FILE* val_f=fopen(file_input,"r");
FILE* out_f=fopen(file_output,"w+");
float temp[np+1];
float tempo;
int i=0;
int uno=1;
int flag=0;
int due=2;
int zero=0;
int file_size;
fprintf(out_f,"%d %d\n", np, due );
while(!feof(val_f))
{
if(flag==0)
{
for(i=0;i<np;i++)
{
fscanf(val_f,"%f" ,&tempo);
temp[i]=tempo;
flag=1;
}
}
fscanf(val_f,"%f",&tempo);
temp[np]=tempo;
for(i=0;i<np;i++)
{
fprintf(out_f,"%f\t",temp[i]);
}
if(temp[np-1]<=temp[np])
fprintf(out_f,"%d\t%d ", uno, zero);
else fprintf(out_f,"%d\t%d\n", zero, uno);
for(i=0;i<np;i++)
{
tempo=temp[i+1];
temp[i]=tempo;
}
}
close(out_f);
close(val_f);
}
并创建具有正确格式的新文件,但是当我尝试读取此新文件时,读取在第315行停止,但文件为401行。 你能帮助我吗?我希望我的问题很容易理解!
答案 0 :(得分:1)
只是要从评论中记录您的解决方案,请使用fclose
而不是close
,并确保注意您的编译器警告,因为他们会指出这一点。
答案 1 :(得分:0)
不确定您的算法应该做什么。以下是我对此的看法:)
void adapta_fichero_serie(const char *file_input, const char *file_output)
{
float n_prev, n_cur; // Processed values as we read them
FILE *in, *out; // Input-output files
n_prev = 0; // Initial value for the first element to compare with
in = fopen(file_input, "rt"); // open read only in text mode
out = fopen(file_output, "wt+"); // append in text mode
fprintf(out, "1\t2\n\n"); // write header: 1 <TAB> 2 <CR><CR>
while (fscanf(in, "%f", &n_cur) == 1) // run loop as long as we can read
{
fprintf(out, n_cur > n_prev ? "1\t0\n" : "0\t1"); // print depending on comparison
n_prev = n_cur; // save value for the next iteration
}
fclose(in);
fclose(out);
}