2016-10-22 69 views
0

我有一個特定的問題。我必須從兩個文件中讀取字符串,並將它們按char字符進行比較,並告訴它們之間的區別以及它們的不同之處。我做了指針和所有的東西,但問題是當它涉及到第一個文件的結尾(它只需要讀取較短文件的長度)我無法比較最後一個字符串,因爲我的for循環直到'\ n',最後一行沒有\ n。但另一方面,如果我將'\ 0'放在for循環中,它會給我一個錯誤的結果,因爲它也將'\ n'作爲char來計數。我如何處理這個問題?建議?我不想使用strcmp(),因爲我需要計算char差異,並且還有其他一些條件可以實現。這裏是我的問題:比較兩個文件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 */ 
}  

另一種方法是使用邏輯和操作員在for循環條件部分測試兩個或多個條件。

從與fgets手冊頁:

字符*與fgets(字符* S,INT尺寸,FILE *流);

fgets()返回s成功,錯誤時NULL或文件結尾 發生而沒有讀取任何字符。

所以你應該有while(true)循環並檢查兩個fgets返回值的輸入結束。

+0

感謝您的解決方案的人! –