我有一个循环问题,我想做的就是逐行复制文件。
我使用了这段代码,但是在输出文件中又写了一个括号和一行。

void copyStringNewFile(ifstream& inData,ofstream& outData)
{
string x = "";

while (inData)
{
    getline(inData, x);
    outData << x << '\n';
}
}


可能我可以删除该行:

string x = "";


在一段时间的条件下,我尝试了一些解决方案:

while (!inData.eof())    // Works similar to while (inData)

while (inData >> x)      // Delete a lot of lines


非常感谢,如果您能解释eof在哪些地方有用(因为在循环中似乎没用)。

最佳答案

您没有检查getline()的返回值。如果失败,则不应进行任何复制。
顺便说一句,您还取决于源文件中的最后一个'\ n',否则您将很难复制最后一行。

这是一种可以正确监视成功读取的表格:

void copyStringNewFile(ifstream& inData, ofstream& outData)
{
    char ch;
    while (inData >> ch)
    {
        outData << ch;
    }
}


或者,如果您准备使用更高级的形式:

void copyStringNewFile(ifstream& inData, ofstream& outData)
{
    outData << inData.rdbuf();
}

07-24 20:24