我正在尝试编写一小段代码,这些代码从两个文件中交替合并行,并将结果写入另一个文件,全部由用户指定。
除此之外,它似乎忽略了'\ 0'字符并一次复制整个文件,而不是一次复制一行。
#include <stdio.h>
#include <stdbool.h>
int main (void)
{
char in1Name[64], in2Name[64], outName[64];
FILE *in1, *in2, *out;
printf("Enter the name of the first file to be copied: ");
scanf("%63s", in1Name);
printf("Enter the name of the second file to be copied: ");
scanf("%63s", in2Name);
printf("Enter the name of the output file: ");
scanf("%63s", outName);
// Open all files for reading or writing
if ( (in1 = fopen(in1Name, "r")) == NULL )
{
printf("Error reading %s", in1Name);
return 1;
}
if ( (in2 = fopen(in2Name, "r")) == NULL )
{
printf("Error reading %s", in2Name);
return 2;
}
if ( (out = fopen(outName, "w")) == NULL )
{
printf("Error writing to %s", outName);
return 3;
}
// Copy alternative lines to outFile
bool notFinished1 = true, notFinished2 = true;
int c1, c2;
while ( (notFinished1) || (notFinished2) )
{
while ( ((c1 = getc(in1)) != '\0') && (notFinished1) )
{
if (c1 == EOF)
{
notFinished1 = false;
}
else
{
putc(c1, out);
}
}
while ( ((c2 = getc(in2)) != '\0') && (notFinished2) )
{
if (c2 == EOF)
{
notFinished2 = false;
}
else
{
putc(c2, out);
}
}
}
// Close files and finish
fclose(in1);
fclose(in2);
fclose(out);
printf("Successfully copied to %s.\n", outName);
return 0;
}
答案 0 :(得分:4)
换行符是'\n'
,而不是'\0'
。后者是零值(空)字节;在C中,它用于表示字符串的结尾,但文本文件不包含它。
答案 1 :(得分:1)
如果这些是文本文件,则每行之后通常不会有\0
- 这几乎完全用于内存中的字符串。 \n
是换行符char,很可能是您想要检查的char。
答案 2 :(得分:0)
我已经完成了您的代码,并发现了错误。要逐行复制文件,您应该寻找'\ n'而不是'\ 0'。 '\ 0'只终止字符串,不指定新行。用'\ n'替换'\ 0'的两个实例将解决您的问题。