【例3.2】打印出两个文本文件第一个不相同的行(每行字符数不多于80),命令行格式为:filecmp filename1 filename2。题目分析文件的按行读取可调用fgets标准库函数。比较字符串可调用strcmp或strncmp标准库函数。自定义函数filecomp用来比较不同行。当找到第一个不同行时filecomp函数返回到main()函数。lp1和lp2的作用为:当filename1和 filename2出现第一个不相同行时,控制循环结束;当filename1或 filename2未出现不相同行但已读到文件结束符或发生读取错误时,控制循环结束。参考程序
/* * 文件名: filecmp.c * 描述: 打印出两个文本文件第一个不相同的行。 * 命令行格式为:filecmp filename1 filename2 * 作者: 刘博 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLINE 80 /* 每行字符数不多于80 */ void filecomp(FILE *fp1, FILE *fp2); int main(int argc, char *argv[]) { FILE *fp1, *fp2; /* 检查命令行参数个数 */ if (argc != 3) { printf("Usage: filecmp File1 File2\n"); exit(1); /* 异常退出 */ } /* 打开文件 */ if ((fp1 = fopen(argv[1], "r")) == NULL) { printf("can't open %s\n", argv[1]); exit(1); /* 异常退出 */ } if ((fp2 = fopen(argv[2], "r")) == NULL) { printf("can't open %s\n", argv[2]); exit(1); /* 异常退出 */ } filecomp(fp1, fp2); /* 关闭文件 */ fclose(fp1); fclose(fp2); } /* 比较两个文件第一个不同行 */ void filecomp(FILE *fp1, FILE *fp2) { char line1[MAXLINE], line2[MAXLINE]; char *lp1, *lp2; do { lp1 = fgets(line1, sizeof(line1), fp1); lp2 = fgets(line2, sizeof(line2), fp2); if (lp1 == line1 && lp2 == line2) { if (strncmp(line1, line2, MAXLINE) != 0) { printf("first difference line:\nfile1: %sfile2: %s", line1, line2); lp1 = lp2 = NULL; /* 找到不同行,循环结束 */ } } else if (lp1 != line1 && lp2 == line2) { printf("end of file1."); } else if (lp1 == line1 && lp2 != line2) { printf("end of second file2."); } } while (lp1 == line1 && lp2 == line2); } 相关资源:C语言课程设计——教室管理系统