-1

我有一个这种格式的文件:

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 行。你能帮助我吗?我希望我的问题很容易理解!

4

2 回答 2

1

只是为了从评论中记录您的解决方案,使用fclose代替close并确保注意您的编译器警告,因为他们会指出这一点。

于 2013-04-25T22:30:22.663 回答
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);
}
于 2013-04-25T23:23:00.193 回答