从一个文件读取输入并将其写入C中的另一个文件

时间:2015-10-01 14:52:22

标签: c file input while-loop

我正在尝试从文件“file.txt”中读取内容并将每个字符从那里写入“copy.txt”但是我在“copy.txt”文件的末尾会得到一个奇怪的字符。

我正在尝试打开和关闭这两个文件并修改程序中while循环的主体,以便不再将该字符放到标准输出(stdout)。

{{1}}

1 个答案:

答案 0 :(得分:3)

你的问题在于这个循环:

do
{
  c = getc(from);
  putc(c, to);
}
while(c != EOF);

您需要了解的是do-whilewhile循环之间的区别。 while循环将在运行循环之前评估表达式(因此循环运行至少0次)并且do-while循环在循环循环之后评估(因此至少运行一次)。

那么问题是什么?您读取了一个字符,将其写入copy.txt,然后评估它是否为EOF并退出循环。现在,从文件中读取最后一个字符时会发生什么?循环将再次运行,因为最后一个字符不是EOF。您的程序将再读一个字符并写入该文件。这就是你的意思。

因此,为了解决问题,您需要在编写之前评估EOF。以下是两次尝试,其中一次将保留do-while循环,另一次使用while循环(更清晰):

Do-While Attempt(不漂亮且不必要的话):

do
{
    c = getc(from);
    if (c != EOF) {            
        putc(c, to);
    }
}
while(c != EOF);

尝试时:

while ((c = getc(from)) != EOF) {
    putc(c, to);
}