C 从文件中读取最后N行

C 从文件中读取最后N行,c,file,C,File,我试图让这段代码从文件中读取一行,但它不起作用。我想知道你们中是否有人能帮我。它将读取最后5行,我可以稍后配置,但现在我只是想让它读取最后一行 #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include <string.h> int main() { FILE *myfile = fopen("X:\\test.txt", "r"); int x, numb

我试图让这段代码从文件中读取一行,但它不起作用。我想知道你们中是否有人能帮我。它将读取最后5行,我可以稍后配置,但现在我只是想让它读取最后一行

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main() {
    FILE *myfile = fopen("X:\\test.txt", "r");
    int x, number_of_lines = 0, count = 0, bytes = 512, end;
    char str[256]; 

    do {
        x = fgetc(myfile);
        if (x == '\n')
            number_of_lines++;
    } while (x != EOF);    //EOF is 'end of file'

    if (x != '\n' && number_of_lines != 0)
        number_of_lines++;

    printf("number of lines in test.txt = %d\n\n", number_of_lines);

    for (end = count = 0; count < number_of_lines; ++count) {
        if (0 == fgets(str, sizeof(str), myfile)) {
            end = 1;
            break;
        }
    }

    if (!end)
        printf("\nLine-%d: %s\n", number_of_lines, str);

    fclose(myfile);
    system("pause");
    return 0;
}
#包括
#包括
#包括
#包括
int main(){
FILE*myfile=fopen(“X:\\test.txt”、“r”);
int x,行数=0,计数=0,字节=512,结束;
char-str[256];
做{
x=fgetc(myfile);
如果(x=='\n')
_行数++;
}while(x!=EOF);//EOF是“文件结尾”
如果(x!='\n'&&U行数!=0)
_行数++;
printf(“test.txt中的行数=%d\n\n”,行数);
对于(end=count=0;count<行数;++count){
如果(0==fgets(str,sizeof(str,myfile)){
结束=1;
打破
}
}
如果(!结束)
printf(“\n行-%d:%s\n”,行数,str);
fclose(myfile);
系统(“暂停”);
返回0;
}

只需创建一个读取所有文件的for或while循环(使用fscanf),当读取到所需行时,将其保存到变量。

只需创建一个读取所有文件的for或while循环(使用fscanf)当读取到所需的行时,将其保存到变量。

以下是一个简单的解决方案,您可以将所有行读取到循环行缓冲区中,并在到达文件结尾时打印最后5行:

#include <stdio.h>

int main(void) {
    char lines[6][256];
    size_t i = 0;
    FILE *myfile = fopen("X:\\test.txt", "r");

    if (myfile != NULL) {
        while (fgets(lines[i % 6], sizeof(lines[i % 6]), myfile) != NULL) {
            i++;
        }
        fclose(myfile);
        for (size_t j = i < 5 ? 0 : i - 5; j < i; j++) {
            fputs(lines[j % 6], stdout);
        }
    }
    return 0;
}
#包括
内部主(空){
字符行[6][256];
尺寸i=0;
FILE*myfile=fopen(“X:\\test.txt”、“r”);
如果(myfile!=NULL){
while(fgets(第[i%6]行)、sizeof(第[i%6]行)、myfile)!=NULL){
i++;
}
fclose(myfile);
对于(大小j=i<5?0:i-5;j
这是一个简单的解决方案,您可以将所有行读入循环行缓冲区,并在到达文件末尾时打印最后5行:

#include <stdio.h>

int main(void) {
    char lines[6][256];
    size_t i = 0;
    FILE *myfile = fopen("X:\\test.txt", "r");

    if (myfile != NULL) {
        while (fgets(lines[i % 6], sizeof(lines[i % 6]), myfile) != NULL) {
            i++;
        }
        fclose(myfile);
        for (size_t j = i < 5 ? 0 : i - 5; j < i; j++) {
            fputs(lines[j % 6], stdout);
        }
    }
    return 0;
}
#包括
内部主(空){
字符行[6][256];
尺寸i=0;
FILE*myfile=fopen(“X:\\test.txt”、“r”);
如果(myfile!=NULL){
while(fgets(第[i%6]行)、sizeof(第[i%6]行)、myfile)!=NULL){
i++;
}
fclose(myfile);
对于(大小j=i<5?0:i-5;j
只需使用
fgets()读取行即可。
。当您得到EOF指示时,最后一行在缓冲区中。当您需要最后N行时,保留一个由N行组成的数组,并在列表中旋转,直到达到EOF。只需使用
fgets()
读取行即可。当您得到EOF指示时,最后一行在缓冲区中。当您需要最后N行时,保留一个由N行组成的数组,并在列表中旋转,直到达到EOF。@JaredDuffey:这个答案对您有帮助吗?很抱歉回复太晚了。。。但是是的,这确实解决了我所有的问题@JaredDuffey:这个答案对你有帮助吗?很抱歉回复太晚了。。。但是是的,这确实解决了我所有的问题!