Код AMI (кодирование и декодирование) работа с файлами в Си

пишу программную реализацию кода AMI на языке Си. Кодирование происходит про принципу: на вход поступает последовательность символов, состоящая из нулей и единиц. Нуль всегда остаётся нулём, а единица меняется на единицу или на -единицу, взависимости от предыдущего уровня.

Необходимо написать кодер и декодер. Я использую 3 файла input.txt -исходная последовательность, output.txt - закодированная последовательность, decoded.txt - раскодированная последовательность.

Однако, в decoded появляется один лишний нуль в конце, предполагаю, что это связано с некорректной работой feof() в данной ситуации.

#include <stdio.h>
#include <conio.h>


int main(){

int srs;
int prev_unit_level = 1;

FILE *inp, *out;

inp = fopen("input.txt","r");
out = fopen("output.txt","w");


while(!feof(inp)){


    fscanf(inp,"%d",&srs);

    if(srs == 0){
    fprintf(out,"%d ",srs);
    }

    if(srs == 1){

        fprintf(out,"%d ",prev_unit_level);
        prev_unit_level = - prev_unit_level;  

    }

}

fclose(inp);
fclose(out);


prev_unit_level = 1;

inp = fopen("output.txt","r");
out = fopen("decoded.txt","w");

while(!feof(inp)){


    fscanf(inp,"%d",&srs);

    if(srs == 0){
    fprintf(out,"%d ",srs);
    }

    else{

        fprintf(out,"%d ",prev_unit_level);
          

    }

}


return 0;


}

Ответы (0 шт):