2015-05-04 43 views
0

我有一個main函數可以很好地工作。它將一個指向FILE的指針傳遞給我的readFile函數,它應該輸出文件的數據並刪除空行。會發生什麼,它會輸出每一行,包括空行的。我徹底檢查了我的代碼,我似乎無法找到問題。任何幫助將不勝感激!關於我的C程序跳過空白行的問題

int 
check_whitespace (char *line) 
{ 
    while (*line) 
    { 
     if (!('\n' == *line || '\t' == *line || ' ' == *line)) 
     return 0; 
     line += 1; 
    } 
    return 1; /* returns 1 if line is ALL blanks */ 
} 


int 
readFile (FILE * fp) 
{ 
    char arrbuff[BUFFSIZE]; 
    while (fgets (arrbuff, BUFFSIZE, fp) != NULL) 
    if (!check_whitespace (arrbuff)) 
     { /* 0 = goodline */ 
     fputs (arrbuff, stdout); 
     } 
    fclose (fp); 
} 
+0

的代碼完全示出的作品。如果你想讓我們解決它,你將不得不向我們展示破碎的東西。 –

回答

0

嘗試修改此行

if (!('\n' == *line || '\t' == *line || ' ' == *line)) 
    return 0; 

在代碼

if (!isspace(*line)) 
    return 0; 

你需要添加

#include <ctype.h> 

我猜你是下運行Windows,並且每行以\r\n結尾nd你不拾起\r

從手冊頁:

isspace()檢查空白字符。在「C」和「POSIX」語言環境中,它們是:空格,換頁符('\f'),換行符('\n'),回車符('\r'),水平製表符('\t')和垂直製表符()。

即使這不能解決它,它會讓你的代碼更具可讀性。

或者,對於最小變化:

if (!('\n' == *line || '\t' == *line || ' ' == *line || '\r' == *line)) 
    return 0; 
+0

可讀,是,已修復,沒有。顯示的代碼已經完美工作。 –

+0

@LeeDanielCrocker或許它適用於你(就像它在Linux上爲我所做的那樣),但它在Windows下不起作用,因爲它不會將'\ r'檢測爲空白字符。這是我對這個問題的看法(根據上述);每一行都將顯示爲非空白。這解決了它。 – abligh

+0

啊,Windows。可能就是這樣。但是,如果文件以非二進制模式打開,甚至Windows都不能正確處理'\ n'? –