我正在尝试编写一小段代码,将两个文件中的行交替合并,并将结果写入用户指定的另一个文件中。
除此之外,此刻它似乎忽略了'\ 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;
}
最佳答案
换行符是'\n'
,而不是'\0'
。后者是一个零值(空)字节;在C中,它用于指示字符串的结尾,但文本文件不包含它。
关于c - C-读取换行符的结尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9346638/