新人求教,cin下再写一个cin就不会执行了?解决方案

新人求教,cin下再写一个cin就不会执行了?
#include "stdafx.h"
#include <iostream>
#include "string"
using namespace std;

int main()
{
int i;
cin>>i;
string str;
getline(cin,str);
}
不管i输入什么都会直接执行完毕。getlin没有被执行。
如果修改为
int main()
{
int i;
cin>>i;
int j;
  cin>>j;
}
当i输入超过范围或者输入字符等,也会直接忽略下一个cin直接跳到结束。
是什么原因啊,非常费解。
错误处理机制的问题?求详解

------解决方案--------------------
C/C++ code

int main()
{
int i;
cin>>i;
string str;
getline(cin,str);
}//这个getline活的了一个回车符,就好像getchar那样的函数一样的。

------解决方案--------------------
问题一:getline好像没有执行?
原因,cin>>i的时候,有一个换行符\n留到了标准输入端中,getline遇到\n就执行完毕了。
问题二:当i输入超过范围或者输入字符等,也会直接忽略下一个cin直接跳到结束。
cin是要读取标准输入流的状态的,当流的状态不正确的时候会停止读入操作直到恢复。
------解决方案--------------------
cin>>i;命令后会在缓存中留有额外的操作符'\n'或'\r\n';因此需要额外增加一个get来清空缓冲区。
即:cin.get();或cin.get();cin.get();(DOS)
------解决方案--------------------
你需要做一个处理用于接收上次输入后留下来的回车符。