任何人都可以消除我对cin.unget()
功能的困惑。请考虑这段代码:
void skip_to_int()
{
if (cin.fail()) { // we found something that wasn’t an integer
cin.clear(); // we’d like to look at the characters
for (char ch; cin>>ch; ) { // throw away non-digits
if (isdigit(ch) || ch=="-") {
cin.unget(); // put the digit back,
// so that we can read the number
return;
}
}
}
error("no input"); // eof or bad: give up
}
如果cin.unget()
将数字放回输入流以再次读取,我难道不会让cin>>ch
相同的字符再次检查条件,从而陷入无限循环吗?
让我们仔细看看skip_to_int
if (cin.fail()) {
如果最后输入的内容不正确
cin.clear();
清除标记并寻找下一个好的数据
for (char ch; cin>>ch; ) {
获取角色
if (isdigit(ch) || ch=="-") {
如果字符是我们想要的字符
cin.unget();
将其放回流中
return;
退出功能!!] >>
}
否则循环返回以获得下一个字符
}
没有更多字符,退出循环
} error("no input");
[
unget
之后,函数立即返回,并与函数一起结束循环。