关于C++ getline函数读取文件时遭遇的问题

问一下关于getline 的问题
 

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

int main()
{
    fstream file("1.txt",ios::in);
    string str;
    int num;
    while(getline(file,str))
    {
        file>>num;
        cout<<num<<endl;
    }
    return 0;
}

文件 1.txt 里的内容是
99 99 99
18 18 18
33 33 33
最后输出的是
18
33
33
相当于第一行没有输出,最后一行输出两次,这是为什么?

然后我自己改了一下代码,变成

int main()
{
	int num;
	fstream file;
	file.open("1.txt");
	string str;
	int i = 1;
	while (i)
	{
		file >> num;
		cout << num << endl;
		getline(file, str);
		if (file.eof())
			i--;
	}
	return 0;
}

当我改成这样的时候就能正常输出
99
18
33了

各位大神求帮助啊啊啊啊啊!!

是这样吗?

第一次getline,file读完第一行,file指向第二行开头,所以num读取到第二行开头的18;
第二次file读完第二行,file指向第三行开头,所以num读取到第三行开头的13;
第二次file读完第三行,file指向第三行末尾,所以num读取到第三行末尾的13;