这只是我的猜测:读入b时遇到回车截止,之后的getline函数把cin流中b之后的回车读入了,于是将name置零了(这便是你说的ignore放在getline后的情况)。调用ignore后忽略掉了这个回车,于是可以读取。用cin>>name应该可以正常读入,但是不能读入空格。
实际上你在每次输入数据的时候会输入一个回车 ‘\n'
cin在读入整数时候会忽略空白碰到非数字('\n')时停止
cin在getline时会把'\n'及之前的内容读回来,哪怕是空行也会读入
cin在读入字符时会把缓冲区内当前字符读入(不会忽略空白)
cin.ignore(1000, '\n')的含义是把缓冲区内从当前字符开始知道'\n'之前字符(如果有1000个的话)忽略掉,实际上你这里假设一行不会超过1000个字符,所以含义是忽略一行
如果你想输入a=1,b=2 name="xxxx", c='y'
所以你的输入是
1回车2回车xxxx回车y回车
cin读入a=1 碰到回车停止 此时1后面的回车还在缓冲区里
cin读b=2时忽略2前面的回车但是停止在2后面的回车
此时你如果掉getline 就会读入一个2后面回车前面的也就是空行 因此此时应当调用一个cin.ignore(1000,'\n')把这个\n忽略掉