gpt4 book ai didi

c - 在 C 中将两个有序文本文件合并到另一个中而不破坏顺序

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

我有两个文本文件;

Andrew Hall
Arnold Price
Shelley Baker

并且,

Arnold Hill
Veronica Clay

如您所见,它们是有序的。我需要将它们合并到另一个再次订购的文本文件中。因此,预期输出是;

Andrew Hall
Arnold Hill
Arnold Price
Shelley Baker
Veronica Clay

但是,输出显示为;

Andrew Hall
Arnold Hill
Arnold Price

我认为不知何故我丢失了两个文件的最后一行,并且 fsort1 和 fsort2 都到达了文件末尾。我怎样才能找到通用的解决方案?我做错了什么?

我的代码是这样的;

fgets(name1, 100, fsort1); 
fgets(name2, 100, fsort2);

while(!feof(fsort1) || !feof(fsort2)){
if(strcmp(name1, name2)<0){
fprintf(foutput, "%s", name1);
fgets(name1, 100, fsort1);
}
else{
fprintf(foutput, "%s", name2);
fgets(name2, 100, fsort2);
}
}

谢谢。

最佳答案

I think somehow I am losing last lines of both files and both fsort1 and fsort2 reach end of their files.

是的,你是。评论已经指出了wrong use of feof ,但是如果您的循环由于只有一个文件结束而停止,则您不会继续读取另一个文件。你可以使用这样的东西:

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


int main(void)
{
FILE *fsort1 = fopen("names1.txt", "r");
FILE *fsort2 = fopen("names2.txt", "r");
FILE *foutput = fopen("names_out.txt", "w");

if ( !fsort1 || !fsort2 || !foutput)
{
perror("Error openng files");
exit(EXIT_FAILURE);
}

char name1[256] = {'\0'};
char name2[256] = {'\0'};
char *r1 = fgets(name1, 256, fsort1);
char *r2 = fgets(name2, 256, fsort2);

while ( r1 && r2 )
{
if ( strcmp(name1, name2) < 0 ) {
fprintf(foutput, "%s", name1);
r1 = fgets(name1, 256, fsort1);
}
else {
fprintf(foutput, "%s", name2);
r2 = fgets(name2, 256, fsort2);
}
}
while ( r1 )
{
fprintf(foutput, "%s", name1);
r1 = fgets(name1, 256, fsort1);
}
while ( r2 )
{
fprintf(foutput, "%s", name2);
r2 = fgets(name2, 256, fsort2);
}
}

关于c - 在 C 中将两个有序文本文件合并到另一个中而不破坏顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942931/

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