clear()进入无限循环

时间:2011-11-08 00:47:04

标签: c++ g++

输出是“无法打开文件”的无限循环。我做错了什么?提前致谢。 (p.s我试图测试它无法打开文件并通过从向量中获取下一个文件名继续处理的条件)

#include <iostream>
#include <istream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main ()
{
ifstream input;
vector<string> files;
files.push_back("ifile");
files.push_back("ifile2");
vector<string>::const_iterator iter=files.begin();
while (iter!=files.end())
{   
    string s;
    input.open(iter->c_str());
    if (!input)
    {
        cerr<<"cannot open the file"<<endl;
        input.close();
        input.clear();
        continue;
    }
    while(input>>s)
        cout<<s<<' '<<ends;
    input.close();
    input.clear();
    cout<<endl;
    ++iter;
}
return 0;
}

3 个答案:

答案 0 :(得分:4)

if (!input)
{
    cerr<<"cannot open the file"<<endl;
    input.close();
    input.clear();
    ++iter;
    continue;
}

你需要在这里增加你的迭代器。

答案 1 :(得分:2)

很简单,你不会在错误情况下递增迭代器。

答案 2 :(得分:1)

  1. iter = files.begin()
  2. 开始循环
  3. 打开失败
  4. iter未递增
  5. 转到2
  6. 更好的编写方法可能是使用for (;;)循环,迭代器增量发生在第三个子句中,这样continue就不会绕过它。