求教 ifstream:open() 和 ifstream:get() 的有关问题

求教大虾 ifstream::open() 和 ifstream::get() 的问题
使用ifstream::open()无法正常打开文件;
在测试中使用了三个文本文件,仅第一个能打开;
初步确定和其中"ifstream in_file;"的位置有关,
和 "while((c = in_file.get()) != EOF) cout << c;" 有关;
求教各位大虾;

#include<iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
const int file_num = 3;
const char* file_names[file_num] = {
"d:\\a.txt",
"d:\\b.txt",
"d:\\c.txt"
};

ifstream in_file;
for (int i = 0; i < file_num; i++)
{
//若用此句替换循环外定义语句,文件能顺利打开;
//ifstream in_file;

in_file.open(file_names[i], ios_base::in);
if (!in_file)
{
cout << "can't open file\n" ;
continue;
}
char c;
while((c = in_file.get()) != EOF) cout << c;  //若无此句,文件能顺利打开;
in_file.close();
}
//in_file.close();
return 0;
}
c++ ifstream::open() ifstream::get() 测试

------解决方案--------------------
in_file.close(); 后 in_file.clear(); 试一下呢。
顺便问一下,定义循环体内局部 ifstream 变量不是挺好的方法吗,为什么非得用 open/close?
------解决方案--------------------
我运行了,3个文件都打开了呀。
也许是编译器不同的缘故
在文件关闭后
in_file.close();
后面加一句
in_file.clear()
试试看
------解决方案--------------------
文件流有三种错误状态位,eofbit(指向文件的结尾);failbit(逻辑错误);badbit(读写错误)。当你读完篇文本的时候,这时候eofbit为true,所以在进行
if (!in_file)
        {
            cout << "can't open file\n" ;
            continue;
        }
的判断语句时会造成程序的结束。此时候应该在读完文件后加上一句
in_file.clear()
这句话的作用是把改变三种错误状态位,这时候你就可以跟第一次读取文本时的状态一样了,可以放心的读取剩余的文本。