关于C++中文件读取采用eof会多读一遍的问题

今天看到一些帖子,发现说当读取文件采用eof作为循环条件时,会多读一遍,但我寻思着我怎么没有遇到过这个问题?然后测试了以下,最后发现了一个问题,似乎这个问题仅针对输入对象为char才会成立,如果是int型就不会有这个问题。
文件内容为
1 2 3
4 5 6
7 8 9

    ifstream fin("test_data.txt" /*, ios::binary*/);
    while(!fin.eof()){
        int a,b,c;
        char d, e, f;
        fin >> d >> e >> f;
        cout << d << e << f << endl;
        // fin >> a >> b >> c;
        // cout << a << b << c << endl;
    }
    //输出为
   //123
   //456
   //789
   //789
    ifstream fin("test_data.txt" /*, ios::binary*/);
    while(!fin.eof()){
        int a,b,c;
        char d, e, f;
        // fin >> d >> e >> f;
        // cout << d << e << f << endl;
        fin >> a >> b >> c;
        cout << a << b << c << endl;
    }
    //输出为
   //123
   //456
   //789

虚心请教,这是因为什么?