如何在C中返回文件行号,以便使用for循环打印文件中的一系列行



我在下面粘贴了我的函数,这就是我希望它做的:如果strcmp(line,info(==0(true(,返回"文件.txt";行号,然后从文件到终端打印f((第-1行到第+6行。即,如果在第10行找到匹配,则输出应为

line 9
line 10
...
line 16

我确信我的for循环有问题,因为这个函数是编写的,它编译并运行程序,但如果(true(,则不会将任何内容打印到屏幕上。

int check_duplicates(string info)
{
FILE *fp = fopen("file.txt", "r");
char line[100];
int line-number
while (fgets(line, sizeof(line), fp))
{
if (strcmp(line, info) == 0)
{
for (int i = (line_number -1); i < (line_number + 6); i++)
{
printf("%sn", line);
}
return 1;
}
}
return 0;
}

如果有人能帮我纠正我做错的地方,那就太棒了!

要获得行号,请使用一个计数器变量,该变量在读取每一行后递增。

要在匹配之前打印该行,请将该行复制到另一个字符串中,并在打印该行和以下6行之前打印该字符串。

假设info的末尾没有换行符,那么在比较之前需要从line中删除换行符

打印接下来6行的循环应该只从0计数到5,不需要使用line中的任何内容。它必须在循环中调用fgets()来读取行,否则您将继续打印同一行。

int check_duplicates(string info)
{
FILE *fp = fopen("file.txt", "r");
char line[100];
char prev_line[100];
int line_num = 0;
while (fgets(line, sizeof(line), fp))
{
line[strcspn(line, "n")] = ''; // remove trailing newline
line_num++;
if (strcmp(line, info) == 0)
{
printf("%d %sn%d %sn", line_num-1, prev_line, line_num, line);
for (int i = 0; i < 6; i++)
{
if (fgets(line, sizeof line, fp)) {
printf("%d %s", line_num + i, line);
} else {
break;
}
}
fclose(fp);
return 1;
}
strcpy(prev_line, line);
}
fclose(fp);
return 0;
}

最新更新