我试图让这段代码从文件中读取一行,但它无法正常工作。我想知道你们其中一个人是否可以帮助我。它将会读取我之后可以配置的最后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;
}
答案 0 :(得分:1)
只需创建一个读取所有文件的for或while循环(使用fscanf),当读数到达所需的行时,将其保存到var。
答案 1 :(得分:1)
这是一个简单的解决方案,您可以将所有行读入循环行缓冲区,并在到达文件末尾时打印最后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;
}