gpt4 book ai didi

c - 如何比较两个文件并显示 C 中的所有差异?

转载 作者:行者123 更新时间:2023-11-30 17:14:23 25 4
gpt4 key购买 nike

我目前正在尝试制作一个程序来比较两个文件并显示所有差异。

我遇到的问题是:

  • 结果的第一行不显示第一个字符。

  • 差异不会产生正确的结果。

我有两个输入文件。

文件.txt

AAA
BBB
CCC
DDD
EEE

文件2.txt

AAA
111
BBB
222
333
CCC
DDD
EEE
444

我得到的输出(第一行有问题)是:

11
BBB
222
333
CCC

我希望得到的输出(没有第一行错误)必须是:

111
222
333
444

这是目前我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int compare(char *fname1, char *fname2)
{
FILE *fp1 = fopen(fname1, "r");
FILE *fp2 = fopen(fname2, "r");
int ch1, ch2;

if (fp1 == NULL)
{
printf("Can't open %s", fname1);
exit(1);
}
else if (fp2 == NULL)
{
printf("Can't open %s", fname2);
exit(1);
}
else
{
ch1 = getc(fp1);
ch2 = getc(fp2);

while ((ch1 != EOF) && (ch2 != EOF) && (ch1 == ch2))
{
ch1 = getc(fp1);
ch2 = getc(fp2);
}

if (ch1 == ch2)
{
printf("Same. \n");
}
else if (ch1 != ch2)
{
printf("Different strings:\n");

while(!feof(fp1) && !feof(fp2))
{
fgets(fname1, ch1, fp1);
fgets(fname2, ch2, fp2);

if(strcmp(fname1, fname2) != 0)
{
printf("%s", fname2);
}
}
}
}

fclose(fp1);
fclose(fp2);
return 0;
}

主要功能:

int main(int argc, char *argv[])
{
if (argc == 3){
compare(argv[1], argv[2]);
}else{
printf("Usage: ./what file.txt file2.txt \n");
}
return 0;
}

比较 file.txt 和 file2.txt 或 file2.txt 和 file.txt 应给出相同的结果。

最佳答案

在第一个循环中,您丢失的第一个字符正在被 getc() 消化。要解决此问题,请尝试仅使用第二个 while() 或在开始下一个 while() 循环之前查找一个字符

关于c - 如何比较两个文件并显示 C 中的所有差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com