这有什么不对?

时间:2013-01-29 18:37:43

标签: c++

  

可能重复:
  Why is iostream::eof inside a loop condition considered wrong?

我使用此代码替换第一个“with”和第二个替换为“ 一切都运行得很好,除了它在读完最后一个字符后再次循环遍历循环并使程序打印另一个字符

#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();
}

1 个答案:

答案 0 :(得分:4)

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

相反,这样做:

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

这将从文件中读取一个字符,然后,如果成功,将对该字符执行某些操作。