-1

可能重复:
为什么循环条件内的 iostream::eof 被认为是错误的?

我用这段代码将第一个“替换为”,第二个替换为“”,一切正常,除了它在读取最后一个字符后再次运行循环,这使得程序打印另一个字符

#include <fstream>
#include <iostream>
using namespace std ;
void main ()
{
    ifstream infile;
    infile.open("infile.txt");
    ofstream outfile;
    outfile.open("outfile.txt");
    char c ;

    int i = 0 ;
    while ( !infile.eof() )
    { 
        infile.get(c)
            if (c=='\"')
            {
                i++ ;
                if (i%2==0)
                    outfile<<"\'\'";
                else 
                    outfile<<"``";
            }
            else 
                outfile<<c;
    }
    outfile.close();
    infile.close();
}
4

1 回答 1

4

不要这样做while ( !infile.eof() )- 这仅检查前一次读取是否到达文件末尾,而不是下一次读取是否会。因此,当读取最后一个字符时,它会再次循环,发现它还没有到达文件末尾,然后继续读取另一个字符,即使没有另一个字符要读取。您c将具有与上一次迭代相同的值。

相反,请执行以下操作:

while (infile.get(c))
{
  // ... 
}

这将从文件中读取一个字符,然后,如果成功,将对那个字符做一些事情。

于 2013-01-29T18:41:42.050 回答