锻炼
编写一个程序,该程序将比较两个文本文件,这些文件的名称将作为调用参数。 此比较应逐行进行,在屏幕上打印出那些不同的行 从另一个文件的同一行开始。打印行及其行号和它们的文件名 来自。行号应相对于文件的开头,即第一行应 具有数字1,第二个数字2,依此类推。
我编写了这样的程序,但是我不明白如何从特定的行开始读取该文件
int main(void)
{
FILE *a = fopen("D:\\lab9.txt");
FILE *b = fopen("D:\\lab9.1.txt");
int position = 0, line = 1, error = 0;
if(a == NULL || b == NULL)
{
perror("Error occured while opening file.");
exit(0);
}
char x = getc(a);
char y = getc(b);
while(x != EOF && y != EOF)
{
position++;
if(x == '\n' && y == '\n')
{
line++;
pos = 0;
}
if(x != y)
{
error++
}
x = getc(a);
y = getc(b);
}
答案 0 :(得分:1)
一种方法是逐行读取文件并在到达要查找的行时开始实际处理:
您可以使用以下类似内容跳到特定行:
char line[256]; /* or other suitable maximum line size */
while (fgets(line, sizeof line, file) != NULL) /* read a line */
{
if (count >= lineNumber)
{
//process your line in here.
}
else
{
count++;
}
}
我认为您无需跳至特定行即可解决该问题。我会亲自解决以下问题:
它是伪装-未测试
int count = 0;
char line1[256]; /* or other suitable maximum line size */
char line2[256]; /* or other suitable maximum line size */
int read1 = fgets(line1, sizeof line1, file1);
int read2 = fgets(line2, sizeof line2, file2);
while (read1 != NULL && read2 != NULL)
{
if( strcmp ( line1, line2))
{
//lines are different. print line number and other info
}
read1 = fgets(line1, sizeof line1, file1);
read2 = fgets(line2, sizeof line2, file2);
}
fclose(file);
}
当文件的行数不同时,先前的代码也无法处理。您应该能够扩展自己。
答案 1 :(得分:0)
有三种处理文件内容的方法:
如您所见,无法从某个行号或基于现有内容开始读取文件。唯一可以做的就是从头开始读取文件并浏览文件,直到获得感兴趣的内容为止。