注册 登录
编程论坛 C++教室

关于C++的流有点问题

w470913537k 发布于 2013-04-30 09:49, 482 次点击
#include <iostream>

using namespace std;

int main ()
{
    double dval;
    istream& get (istream &in);
    get(cin);
    cin>>dval;
    cout<<dval<<endl;
    return 0;
}

istream& get (istream &in)
{
    int ival;
    while (in>>ival, !in.eof())
    {
        if (in.bad())
            throw runtime_error("流出现问题");
        if (in.fail())
        {
            cerr<<"数据有误,清重试";
            in.clear(istream::failbit);
            in.ignore(200,' ');
            continue;
        }
        cout<<ival<<" ";
    }
    in.clear ();

    return in;
}

这是我写的C++primer这本书里的一个小程序,稍微做了改动,关于流方面,我输入的时候打了ssdf这些字符进去以后, if (in.fail())指出了失败的io操作,然后输出数据有误,请重试,在此之后不是进行了流fail位的重置吗,应该这样是可以继续输入的吧,可是这样就进入死循环下去了,似乎流没有重置一样。还有那个ignore函数,我不太理解是什么意思,如果按照这上面写的这样,不是永远都无法跳出while的循环了吗?求大神指点迷津
5 回复
#2
w470913537k2013-04-30 15:24
很郁闷,我在这个论坛问的问题为什么从来都没有人给我解答呢。。。为什么为什么
#3
w470913537k2013-04-30 15:33
求解答啊
#4
邓士林2013-04-30 18:11
我输入ssdf,结果是数据有误,清重试";还是无限循环。
#5
w470913537k2013-05-01 08:22
回复 4楼 邓士林
是啊。。。我也是这样。。后来在C++吧得到了解答。。那个重置只是把标记位设置为good,并没有清除缓存的。。看样子这个论坛好像是真的没人了。
#6
天使梦魔2013-05-01 10:00
while (in>>ival, !in.eof())
那个逗号是什么意思,是想用与运算符&&还是或运算符||
如果你想遵循这个意思就用逻辑或

continue改成break
你没有跳出当前循环,也没有跳到重新输入的地方,当然一直循环下去。
break可以直接跳出循环
1