내 코드의 한 조건이 작동하지 않습니다. 이 조건은 첫 번째 파일이 4 행이되고 두 번째 파일이 5 행이되는 경우입니다. 두 파일의 첫 번째 4 줄은 동일하지만 두 번째 파일의 다섯 번째 줄은 다를 수도 있고 같을 수도 있습니다. 제 출력물에는 "5 번째 줄에는 다른 것이 있습니다"라고 표시되어야하지만,이 파일들이 동일하다는 것을 의미합니다. 이 코드를 수정하려면 어떻게해야합니까?2 텍스트 파일 간의 차이점을 찾으십시오
첫 번째 파일 :
one
two
three
four
두 번째 파일 :
one
two
three
four
five
내 코드 : 여기
void diff(char* fileptr1, char* fileptr2)
{
int maxlinelen=BUFF; //maximum line length buffer size
/** string arrays pointers **/
char *linebuffer1;
char *linebuffer2;
/** file pointers **/
FILE *fp1;
FILE *fp2;
int line=0; //line counter
int counter=0; //identical flag
linebuffer1=(char*)malloc(maxlinelen * sizeof(char*)); //memory allocation for linebuffers
linebuffer2=(char*)malloc(maxlinelen * sizeof(char*));
if((linebuffer1==NULL) || (linebuffer2==NULL)) //check memory allocating process
{
fprintf(stderr,"Command:diff :Memory allocating failed!\n");
exit(1);
}
if(((fp1=fopen(fileptr1,"r"))!=NULL)&&((fp2=fopen(fileptr2,"r"))!=NULL)) //make sure both files open?
{
//read both files lines till end of line
while(((fgets(linebuffer1,maxlinelen,fp1))!=NULL)&&((fgets(linebuffer2,maxlinelen,fp2))!=NULL))
{
while(strlen(linebuffer1)==maxlinelen-1) // perfect time for memory reallocating
{
maxlinelen*=DOUBLE; //grow size
linebuffer1=realloc(linebuffer1,maxlinelen * sizeof(char)); //reallocate memory to new size
if(linebuffer1==NULL) //make sure allocation is succesfull
{
fprintf(stderr,"Command : diff :Memory reallocating failed for linebuffer1\n");
exit(1);
}
fgets(linebuffer1+(maxlinelen/DIV-1),(maxlinelen/DIV)+1,fp1); //continue read line after reallocation
}
while(strlen(linebuffer2)==maxlinelen-1)
{
maxlinelen*=DOUBLE;
linebuffer2=realloc(linebuffer2,maxlinelen * sizeof(char));
if(linebuffer2==NULL)
{
fprintf(stderr,"Memory reallocating failed for linebuffer2\n");
exit(2);
}
fgets(linebuffer2+(maxlinelen/DIV-1),(maxlinelen/DIV)+1,fp2); //
}
line++; //increae line counter
if(strcmp(linebuffer1,linebuffer2)!=0) //compare both line string arrays if not
{
printf("The files are different.The first difference is in line %d\n",line); //diff. here
exit(1);
}
if(strcmp(linebuffer1,linebuffer2)==0) //compare both line string arrays if same
{
counter++; //increase identical counter
}
}
if(counter==line) //if identical counter equal total line
{
printf("The files are identical.\n");
}
}
else {
fprintf(stderr,"Command: diff :File open failed!\n");
}
//fclose(fp1);fclose(fp2);
}
다른 사람에게 CompSci 숙제 질문을하는 것처럼 보입니다. –
가장 큰 피로감은 들여 쓰기가 모두 펑크 난다는 것입니다. –
편집 해 주셔서 감사합니다. – ccc