Nhập vào một xâu ký tự. Mã hóa mỗi ký tự thành một mã dài 8 bits. Ghi các ký tự vừa nhập vào file có tên vanban.txt.
Đọc các ký tự từ file vanban.txt, sử dụng phương pháp mã hóa khối (8 ký tự) để mã hóa các ký tự trong khối sao cho tổng số bit 1 trên các hàng và các cột là một số lẻ.
Ghi các khối vừa mã hóa vào 1 file có tên makhoi.txt

code

#include<conio.h>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#define max 100
void chuoisangnhiphan(char c, FILE *f)

{

short int n=toascii(c),tong,i;

short int m=128;

for(i=0; i<8; i++)

{

tong=n/m;

printf("%d",tong);

fprintf(f,"%d",tong);


n=n-m*tong;

m=m/2;

}

}



void themmotbit(short int bit1, FILE *f)

{

if (bit1%2==0) fprintf(f,"1");

else fprintf(f,"0");
}



int main(void)

{

FILE*f;

short int n,m,tong,i;

char c,x,st[max];

f=fopen("C:\\vanban.txt","w");

printf("Nhap xau:");

scanf("%s",&st);

for (i=0; i<strlen(st); i++)

{

chuoisangnhiphan(st[i],f);
fprintf(f,"\n");
printf("\n");
}


fclose(f);

FILE *g=fopen("C:\\makhoi.txt","w");

if ((f=fopen("C:\\vanban.txt","r"))==NULL)

{

printf("khong the mo file !\n");

exit(0);

}

else

while (!feof(f))

{ c=fgetc(f);

if (c!='1' && c!='0')
fscanf(f,"\n");
else fseek(f,-8,SEEK_CUR);
int bit1=0;

for (i=0; i<8; i++)

{

c=fgetc(f); fprintf(g,"%c",c);


if ((toascii(c)-48)==1) bit1++;

}

themmotbit(bit1,g);
fprintf(g,"\n");
printf("%c",c);
}

fclose(g);
getch();

}

bị lỗi YYYYYYYY ở file mã khối hàng cuối cùng do mình quét xử lý cả ký tự xuống dòng , chương chình con themmotbit k bỏ qua ký tự xuống dòng ,bh mình có thể xóa 1 hàng cuối cùng hoặc bỏ qua k xử lý ký tự xuống dòng mà vẫn đọc được hàng bit dưới không