2016-05-29 35 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