搞不明白的读文件有关问题,涉及到eof成员函数,很棘手哦

搞不明白的读文件问题,涉及到eof成员函数,很棘手哦!...intmain(){ifstreamfincharnext//******fin.open(

搞不明白的读文件问题,涉及到eof成员函数,很棘手哦!
...

int   main()
{
        ifstream   fin;
        char   next;                   //   ******
       
        fin.open( "File.txt ");
        if   (fin.fail())
        {
                cout < < "Input   file   opening   failed.\n ";
                exit(1);
        }
       
        fin> > next;
        while   (!fin.eof())
        {
                cout < <next < < "   ";
                fin> > next;
        }

        fin.close();

        return   0;
}

文件File.txt中的内容是1   2   3   4

程序输出为:1   2   3   4

但是如果//   ******处改为     int   next;其他地方都不变,输出则是:1   2   3

我在while循环里置个计数器,发现next是char类型时,循环里面的语句执行了4次,而当next为int类型时,循环里面的语句只执行了3次,为何是int型时就少执行了一次呢?我想造成这种结果的缘由应该是eof()的工作原理。

望达人详细讲解下其中的原因,感谢万分!

[解决办法]
因为char,在读最后一个数据时仍然不会置eof,要在试图读最后一个的下一个时才置eof
int,则在读最后一个数据时就会顺便置eof。
如果想更深入了解C++流,就去找《标准C++输入输出流与本地化》