我正在尝试编写一小段代码,用于从两个文件中交替合并行,并将结果写入另一个文件,所有文件都由用户指定。C - 读取换行符的结尾
除此之外,它似乎忽略了'\ 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'来检测以前的行结束。 我想我一直在研究C太久,现在我要去海滩休息一下。 – gbhall 2012-02-19 04:28:05
@gbhall:Re:“我一直在使用'\ 0'来检测一行以前的结尾”:好吧,如果你一直在用'fgets'或'getline'来读取整行一次,那么字符串中的最后一个字符将是“\ n”,之后将是一个“\ 0”来表示字符串已经结束;所以使用''\ 0''来检测行结束会或多或少的工作,因为C字符串的工作方式。但是如果你一直这样使用'getc',那么 - 不。 – ruakh 2012-02-19 14:28:46