我在下面粘贴了我的函数,这就是我希望它做的:如果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;
}