如何使用C打印文件的最后n行?

时间:2016-05-29 04:59:35

标签: c

我一直在为这段代码工作,我似乎无法弄清楚我的代码有什么问题。我试图使程序接受两个命令行参数,第一个是要读取的文本文件的名称,第二个是要打印的文件行数。我试图创建一个循环,计算行数,每次到达新行字符时添加一个,另一个循环打印文本行,但我有很多麻烦。我只是在编程课程的介绍中,这是C语言,我已经尝试了很多方法来完成这项工作。这是我的代码中应该执行此操作的函数。任何帮助将不胜感激!

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);

}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

尝试替换此:

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);

与此:

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);