gpt4 book ai didi

c - 2个文件之间的差异

转载 作者:行者123 更新时间:2023-11-30 16:52:50 26 4
gpt4 key购买 nike

我试图找出两个文件之间的差异:

Car
Wine
Man
Nobody
Car
Shoes
Cookies

我希望程序显示第一个文件中的单词,但不显示第二个文件中的单词,如下所示:

Wine
Man

这是我尝试过的:

#include<stdio.h>
#include<stdlib.h>
#define STORE 300
void file1(char*line,char*line1){
if(strcmp(line,line1)<0){
printf("%s",line);
}
}
int main(){
FILE *fp1, *fp2;
fp1=fopen("file1.txt","r");
fp2=fopen("file2.txt","r");
char buff[STORE], buff1[STORE];
while(fgets(buff,STORE,fp1)!=NULL){
while(fgets(buff1,STORE,fp2)!=NULL){
file1(buff,buff1);
}
rewind(fp2);
}
}

我的输出是:

Car
Car
Car
ManMan

为什么我没有得到我期望的输出?

最佳答案

背景:

这是您的程序在英语中执行的操作。

Car is alphabetically before Nobody, so print it.
Car is NOT before Car, so do NOT print it.
Car is before Shoes -> print
Car is before Cookies -> print
Wine is NOT before Nobody (or anything) -> do NOT print
Man is before Nobody -> print
Man is NOT before Car -> do NOT print
Man is before Shoes -> print
Man is NOT before Cookies -> do NOT print

因此,你的结果是:车、车、车、人、人

第 1 步:你的 strcmp() 调用需要是 != 0 而不是 <0。你从不打印 'wine' 的原因是因为 strcmp("wine", "nobody") > 0,所以它不会打印 Wine(永远)

第 2 步:void file1() 函数如果匹配则返回 1,如果不匹配则返回 0,将它们相加,仅在总和为 0 时才打印该行。这是非常低效的,但会...得到工作完成。

第 3 步(也许?)您是否在最后一个“Man”末尾遗漏了新行,或者导致它打印 ManMan?

int file1(char*line,char*line1){
if(strcmp(line,line1)!=0) /* note correct comparison */
return 0;
else
return 1;
}

...

int match = 0;
while(fgets(buff,STORE,fp1)!=NULL){
match = 0;
while(fgets(buff1,STORE,fp2)!=NULL){
match += file1(buff,buff1);
}
if (match == 0) { /* it never matched so print it */
printf("%s", buff);
}
rewind(fp2);
}

关于c - 2个文件之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107171/

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