【发布时间】:2016-12-08 14:45:56
【问题描述】:
我想在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;
}
【问题讨论】:
-
while(!feof())总是错误的(stackoverflow.com/questions/5431941/…)。 -
feof是一个函数。将文件指针与它进行比较是无稽之谈。 -
编译时启用警告。
-
不是你的核心问题,但你想成为
hptr和dptr非空:if (hptr && dptr) ...`跨度>