繁体   English   中英

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

[英]Merging Two Ordered Text Files Into Another Without Breaking The Order in C

我有两个文本文件;

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);
    }
}

谢谢。

我以某种方式失去了这两个文件的最后几行,并且fsort1和fsort2都到达了文件末尾。

是的,你是。 注释已经指出了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);        
    }        
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM