课后作业。。。
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main (){
int n,r;
int i,k;
char yn,ch,j;
char *CRC_data;
char *CRC_p;
char *CRC_ans;
char *CRC_all;
char *CRC_temp;
while (((ch != 'q') && (ch != 'Q'))){
///input method//
do{
printf("Input length of group(default 64):\n");
scanf("%d",&n);
printf("Input length of p(default 16):\n");
scanf("%d",&r);
printf("Length of group is %d,length of p is %d\n",n,r);
printf("Is it right?(Y or N)\n");
getchar();
yn=getchar();
} while (((yn!='y') && (yn != 'Y')));
CRC_data=(char *)malloc(n+1);
CRC_temp=(char *)malloc(n+1);
CRC_p=(char *)malloc(r+1);
CRC_ans=(char *)malloc(r);
CRC_all=(char *)malloc(n+r);
do{
printf("Input CRC data:(out of %d will not be read)\n",n);
printf("e.g:10011001010010110\n");
for (i=0;i<n;i++){
*(CRC_data+i)=getch();
printf("%c",*(CRC_data+i));
if ((*(CRC_data+i) != '1') && (*(CRC_data+i) != '0')){
(*(CRC_data+i))='0';
}
}
*(CRC_data+n)='\0';
printf("\nyour input: CRC_data:\n");
printf("%s\n",CRC_data);
printf("Is it right?(Y or N)\n");
getchar();
yn=getchar();
} while (((yn!='y') && (yn != 'Y')));
do{
printf("Input CRC p:(out of %d will not be read)\n",r);
printf("e.g:10011001010010110\n");
for (i=0;i<r;i++){
*(CRC_p+i)=getch();
printf("%c",*(CRC_p+i));
if ((*(CRC_p+i) != '1') && (*(CRC_p+i) != '0')){
(*(CRC_p+i))='0';
}
}
*(CRC_p+r)='\0';
printf("\nyour input: CRC_p:\n");
printf("%s\n",CRC_p);
printf("Is it right?(Y or N)\n");
getchar();
yn=getchar();
if (((*CRC_p) != '1')){
printf("your input is wrong, the highest bit of CRC_p must be 1 !\n");
yn = '\0';
}
} while (((yn!='y') && (yn != 'Y')));
/start CRC//
strcpy(CRC_temp,CRC_data);
*(CRC_temp+n)='\0';
for (i=0;i<(n-r+1);i++){
if (*(CRC_temp+i)== '1'){
for (k=0;k<r;k++){
if (((*(CRC_temp+i+k)) != (*(CRC_p+k)))){
*(CRC_temp+i+k) = '1';
}
else {
*(CRC_temp+i+k) = '0';
}
}
}
}
strcpy(CRC_ans,(CRC_temp+n-r+1));
strcpy(CRC_all,CRC_data);
*(CRC_all+n)='\0';
strcat(CRC_all,CRC_ans);
*(CRC_all+n+r)='\0';
printf("CRC_ans is \n");
printf("%s\n",CRC_ans);
printf("CRC_all is \n");
printf("%s\n",CRC_all);
free(CRC_data);CRC_data=NULL;
free(CRC_temp);CRC_temp=NULL;
free(CRC_p);CRC_p=NULL;
free(CRC_ans);CRC_ans=NULL;
free(CRC_all);CRC_all=NULL;
printf("Continue? Or put Q to exit.");
ch = getch();
}
return 0;
}
转载请注明出处,禁止用于任何商业用途,否则后果自负!