2016-05-29 34 views
0

我一直在這個代碼上一直工作,我似乎無法弄清楚我的代碼有什麼問題。我試圖讓程序接受兩個命令行參數,第一個是要讀取的文本文件的名稱,第二個是要打印的文件的行數。我試圖製作一個循環來計算行數,並在每次到達新行字符時添加一行,另一個循環打印文本的行,但我遇到了很多麻煩。我只是介紹編程類,這是C語言,我嘗試了很多方法來完成這個工作。這是我的代碼中應該這樣做的功能。任何幫助將不勝感激!如何使用C打印文件的最後n行?

char ch = 0; 
long num_lines = 0; 

while(!feof(fileequals)){ 
    ch = fgetc(fileequals); 
    if(ch == '\n'){ 
     num_lines++; 
    } 
} 
fseek(fileequals, 0, SEEK_SET); 

const int length = 100; 
char line[length]; 
char *c = 0; 
long line_count = 0; 

if(num_rows_to_read > num_lines){ 
    num_rows_to_read = num_lines; 
} 

do{ 
    c = fgets(line, length, fileequals); 
    if (c != NULL && (line_count >= num_lines - num_rows_to_read)){ 
     printf("%s", line); 
     line_count++; 
    } 
    else{ 
     continue; 
    } 
}while (c != NULL); 

}

+1

[?爲什麼「而(!FEOF(文件))」永遠是錯的(http://stackoverflow.com/questions/5431941/why-is- while-feof-file-always-wrong) – kaylum

+0

當前程序的問題究竟是什麼?請提供投入,預期產出和實際產出。並建議您使用調試器來逐步執行您的程序,以找出事情出錯的地方。 – kaylum

+0

輸入應該是任何帶有單詞的文件,並且輸出應該是文件的最後n行,但是當我使用這個代碼時,我根本沒有輸出,因爲我猜因爲某種原因它永遠不會輸入打印每行的循環 – emmag

回答

0

「LINE_COUNT ++;」應在每次執行fgets()後執行,而不管if語句。在do-while循環應該是這樣的:

do{ 
    c = fgets(line, length, fileequals); 
    if (c != NULL && (line_count >= num_lines - num_rows_to_read)){ 
     printf("%s", line);    
    } 
    line_count++; 
}while (c != NULL); 
+0

謝謝!這固定它,它完美的作品! – emmag