C //练习 7-6 编写一个程序,比较两个文件并打印它们第一个不相同的行。

发布时间:2024年01月18日

C程序设计语言 (第二版) 练习 7-6

练习 7-6 编写一个程序,比较两个文件并打印它们第一个不相同的行。

注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010

?

代码块:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLINE 1000

int main(int argc, char *argv[]) {
    char* prog = argv[0];
    FILE *fp1, *fp2;
    unsigned long line;
    char *fn1, *fn2;
    char *fr1, *fr2;
    char line1[MAXLINE], line2[MAXLINE];

    if(argc != 3){
        fprintf(stderr, "%s: must provide two files as inputs\n", prog);
        exit(1);
    }

    fn1 = *++argv;
    if((fp1 = fopen(fn1, "r")) == NULL){
        fprintf(stderr, "%s: cannot open %s\n", prog, fn1);
        exit(2);
    }

    fn2 = *++argv;
    if((fp2 = fopen(fn2, "r")) == NULL){
        fprintf(stderr, "%s: cannot open %s\n", prog, fn2);
        exit(2);
    }

    line = 1;
    for(;; line++){
        fr1 = fgets(line1, MAXLINE, fp1);
        fr2 = fgets(line2, MAXLINE, fp2);

        if(fr1 == NULL || fr2 == NULL){
            break;
		}
        if(strcmp(line1, line2) != 0){
            break;
		}
    }

    if(fr1 == NULL && fr2 == NULL){
        printf("files match\n");
        exit(0);
    }

    if(fr1 == NULL || fr2 == NULL){
        printf("file %s ended before file %s\n",
               (fr1 == NULL) ? fn1 : fn2,
               (fr1 == NULL) ? fn2 : fn1);
    }
	else{
        printf("mismatch on line %ld:\n%s:\n%s\n%s:\n%s\n",
               line, fn1, line1, fn2, line2);
    }

    system("pause");
	return 0;
}
文章来源:https://blog.csdn.net/navicheung/article/details/135646948
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。