gpt4 book ai didi

c - 在C中合并两个文件

转载 作者:行者123 更新时间:2023-11-30 16:53:03 25 4
gpt4 key购买 nike

我想在C中合并两个文件,最后停止。

我有一个程序,但即使在我的文件结束后它仍然会拼出单词。例如:

文件1:

a
b
c

文件2:

1
2
3
4
5

我得到的结果是:

a
1
b
2
c
3
c
4
c
5

我想要:

a
1
b
2
c
3
4
5

我认为这是我的 while 循环中的 if 语句,这是我的问题。我不知道如何定义它。

我的代码是:

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


int main(void) {

char d[200]; //char för da.txt
char h[200]; //char för hej.txt
FILE *hptr, *dptr;

hptr = fopen("hej.txt", "r"); //Öppna hej.txt => hptr
dptr= fopen("da.txt", "r"); //Öppna da.txt => dptr

/*
if(((hptr) == NULL && (dptr) == NULL)) //Fall 1
{
printf("Error, båda filerna är tom");
exit(1);
}


if ((hptr) == NULL) //Fall 2 när hej.txt är tom
{
fscanf(dptr,"%[^/]", d); //Hämtar från da.txt
printf("\nFil 2:\n%s", d); //Skriver ut från da.txt
exit(1);
}

if ((dptr) == NULL) //Fall 3 när da.txt är tom
{
fscanf(hptr,"%[^/]", h); //Hämtar från hej.txt
printf("Fil 1:\n%s", h); //Skriver ut från hej.txt
exit (1);
} */

if(hptr != NULL || dptr != NULL) //Fall 4 när ingen fil är tom
{

while (!feof (hptr) && !feof (dptr))
{
if (hptr ***I guess this is the problem*** == feof)
{
fgets(d, 200, dptr);
printf("%s", d);
}

if (hptr == feof)
{
fgets(h, 200, hptr);
printf("%s", h);
}

}

fclose (hptr);
fclose (dptr);
}
//getch();
return EXIT_SUCCESS;
}

最佳答案

feof 仅在您尝试执行某些 IO 时更新。当您调用 fgets 时,它到达 EOF 并失败,您只是打印该字符串,即使它没有更新。这就是为什么你会得到重复的“c”

试试这个:

 while (!feof (hptr) || !feof (dptr))
{
if (fgets(d, 200, dptr))
{
printf("%s", d);
}

if (fgets(h, 200, hptr))
{
printf("%s", h);
}
}

关于c - 在C中合并两个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41042154/

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