C + +为​​什么还剩下输入缓冲区?

时间:2018-09-04 02:55:07

标签: c++

在我的第一个输入项之后,我的第二个Entery NodeElement (Element ... )字段将填充上一个条目的输入缓冲区。为什么?我什至在使用name,但问题仍然存在。请帮我解决这个问题。这是跳入C ++ 书中的问题。

getline

2 个答案:

答案 0 :(得分:1)

cin >> p[i].PhoneNumber;仅获取数字。这样一来,在您下次尝试读取行时,仍会在输入缓冲区中结束该行。

答案 1 :(得分:1)

阅读getline的参考文献时,您会看到正在发生的事情:

在用空格分隔的输入后立即使用时,例如

之后
int n; 
std::cin >> n; 
getline(cin, n); //if used here

getline消耗operator>>,留在输入流中的结束符并立即返回。常见的解决方案是使用

忽略输入行上的所有剩余字符。
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

在切换到面向行的输入之前。