C ++中的输入流。与cin unget()函数有点混淆

问题描述 投票:2回答:1

任何人都可以消除我对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相同的字符再次检查条件,从而陷入无限循环吗?

c++ cin
1个回答
2
投票

让我们仔细看看skip_to_int

 if (cin.fail()) {

如果最后输入的内容不正确

       cin.clear();

清除标记并寻找下一个好的数据

       for (char ch; cin>>ch; ) {

获取角色

            if (isdigit(ch) || ch=="-") {

如果字符是我们想要的字符

                 cin.unget();

将其放回流中

                 return;

退出功能!!] >>

            }

否则循环返回以获得下一个字符

        }

没有更多字符,退出循环

  }

  error("no input");

[unget之后,函数立即返回,并与函数一起结束循环。

© www.soinside.com 2019 - 2024. All rights reserved.