2016-10-22 10 views
0

문제점이 있습니다. 나는 두 개의 파일에서 Strings를 읽고 char에 의해 char을 비교해야하며, 차이점과 차이점을 알려준다. 나는 포인터와 모든 물건을 만들었지 만 문제는 첫 번째 파일의 끝에 올 때이다. (짧은 파일의 길이 만 읽어야한다.) for 루프가 끝날 때까지 마지막 String을 비교할 수 없다. '\ n', 마지막 행에는 \ n이 없습니다. 하지만 '\ 0'을 for 루프에 넣으면 다른 쪽에서는 잘못된 결과를 얻습니다. 왜냐하면 '\ n'이 char로 간주되기 때문입니다. 이 문제를 어떻게 처리합니까? 제안? char 차이를 셀 필요가 있기 때문에 strcmp()를 사용하고 싶지는 않습니다. 다른 조건도 있습니다.두 파일 비교 char by char - C에서 파일 오류 끝

while(!feof(fPointer)){ 
    zeichnen = 0; 
    fgets(singleLine, 150, fPointer); 
    fgets(singleLine2, 150, fPointer2); 
    length = strlen(singleLine);   // save the length of each row, in order to compare them 
    length2 = strlen(singleLine2); 
    if(length <= length2){ 
     for(i=0; singleLine[i] != '\n'; i++){ 
       singleLine[i] = tolower(singleLine[i]); 
       singleLine2[i] = tolower(singleLine2[i]); 
      if(singleLine[i] != singleLine2[i]){ 
        zeichnen++; 
       } 
     } 
     printf("Zeile: %d \t Zeichnen: %d\n", zeile, zeichnen); // row, char 
+1

참고 : 처리 할 ** 두 가지 ** EOF 조건이 있습니다. 참고 2 :'feof()'를 사용하지 마십시오. http://stackoverflow.com/q/5431941/905902 – wildplasser

+0

이전에 파일을 비교하고 포함시킬 파일을 결정 했으므로 두 가지 EOF 조건이 필요하지 않습니다. while 루프에서 이것은 내 문제가있는 코드의 일부일뿐입니다. –

+0

주 3 : 모든 IO 함수의 반환 값을 항상 확인하십시오 (stdio/stderr에 대한 일반 인쇄는 제외). 왜냐하면 wpuld가 그 값보다 지루해지기 때문입니다. – hyde

답변

0
for(i=0; i < min(length, length2); i++) { 
     if (singeLine[i] == '\n' || singleLine2[i] == '\n') 
     break; 
     /* Do work */ 
}  

대체 논리와 운영자가 루프 조건 부분에 두 개 이상의 조건을 테스트하기 위해 사용하는 것입니다 : 여기 내 문제입니다.

는 fgets 설명서 페이지에서

:

* CHAR는 fgets (숯 * s의 INT 크기, 파일 스트림 *);

성공시 fgets()가 s을 반환하고 오류가 있거나 문자를 읽지 않은 상태에서 파일이 끝날 때 NULL이 반환됩니다.

while (true) 루프가 있어야하고 두 fgets가 입력의 끝을 반환하는지 확인하십시오.

+0

해결책 주인을 보내 주셔서 감사합니다! –