关于getline函数的一些有关问题,求大神指教

关于getline函数的一些问题,求大神指教
string brand;
int weight;
int cal;
};
candybar *ps= new candybar[3];//创建一个有三个元素的动态结构数组
for(i=0;i<3;i++)//依次给三个结构数组元素赋值
{
getline(cin,(ps+i)->brand);
cin>>(ps+i)->weight;
cin>>(ps+i)->cal;


}
for(i=0;i<3;i++)//输出三个数组元素
{
cout<<(ps+i)->brand<<endl;
cout<<(ps+i)->weight<<endl;
cout<<(ps+i)->cal<<endl;
}

delete [] ps;
cin.get();
cin.get();

}


程序代码如上。
问题是我在输入的时候在输完第二个元素的brand成员后,程序就结束了。但如果我在输入循环的末尾那里再加上一条cin.get()的话,输入就正常了,这怎么回事
------解决方案--------------------
输入cin的状态看看
------解决方案--------------------
没有头文件#include <iostream>