[英]Merging text from two text files alternatively
嗨,我使用 fgets 尝试了相同的方法,但结果却大不相同,我可以通过 fgetc 实现它,但不能使用 fgets,我做错了什么。 不知何故,在合并一行时会被跳过,例如它从每个文件中复制第一个文件,然后跳到第三行。
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
int main()
{
FILE *pointer1, *pointer2, *pointer3;
char source1[80],source2[80],target[80];
char str1[80],str2[80];
printf("Enter the source and source 2\n");
scanf("%s %s", source1,source2);
printf("Enter the destination\n");
scanf("%s",target);
pointer1 = fopen(source1,"r");
pointer2 = fopen(source2,"r");
pointer3 = fopen(target,"w");
if(pointer1 == NULL || pointer2==NULL || pointer3==NULL) {
printf("Cannot open a file\n ");
exit(1);
}
while(1) {
if(fgets(str1,79,pointer1)!=NULL) {
fputs(str1,pointer3);
}
if(fgets(str1,79,pointer1)==NULL)
break;
if(fgets(str2,79,pointer2)!=NULL) {
fputs(str2,pointer3);
}
if(fgets(str2,79,pointer2)==NULL)
break;
}
fclose(pointer1);
fclose(pointer2);
fclose(pointer3);
printf("Merging completed successfully\n");
printf("Press any key to exit\n");
getch();
}
你得到的意外行为实际上是非常预期的。 即使您在脑海中只是测试文件是否尚未完成,例如: if(fgets(..) != NULL)
,该函数实际上会从文件中提取该行并丢失它,因为您没有不要用它做任何事情。
首先,我要提两点:
我会在这里帮助你解决一个问题,但是,为了不让它太容易,我也犯了一个小错误。
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include<conio.h>
int main() {
FILE *pointer1, *pointer2, *pointer3;
char source1[80], source2[80], target[80];
char str1[80], str2[80];
printf("Enter the source and source 2\n");
scanf("%s %s", source1, source2);
printf("Enter the destination\n");
scanf("%s", target);
pointer1 = fopen(source1, "r");
pointer2 = fopen(source2, "r");
pointer3 = fopen(target, "w");
if (pointer1 == NULL || pointer2 == NULL || pointer3 == NULL) {
printf("Cannot open a file\n ");
exit(1);
}
int end_first_file = 0;
int end_second_file = 0;
while (1) {
if (fgets(str1, 79, pointer1) != NULL && end_first_file == 0) {
fputs(str1, pointer3);
} else {
end_first_file = 1;
}
if (fgets(str2, 79, pointer2) != NULL && end_second_file == 0) {
fputs(str2, pointer3);
} else {
end_second_file = 1;
}
if(end_second_file && end_first_file)
break;
}
fclose(pointer1);
fclose(pointer2);
fclose(pointer3);
printf("Merging completed successfully\n");
printf("Press any key to exit\n");
getch();
}
我告诉过你的错误,我让你解决,如下:
以:
来源1:
aa
啊啊啊啊
来源2:
bb
bbb
bbbb
你会得到输出:
aa
bb
啊啊啊啊
bbbb
Q1:那里发生了什么? “啊啊啊”。
Q2:你是怎么解决的?
亲切的问候,克劳迪
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.