cin.ignore(3)在未能获得带有cin的双倍>> VAR

时间:2011-05-10 13:44:03

标签: c++

我正在使用c ++ Primer Plus学习c ++,我正在第7章尝试创建以下函数:

double getDouble(const char * message){
    double temp;
    std::cout << (message);
    if (!(std::cin >> temp)){
        std::cin.clear();
        std::cin.ignore(3); // Why does this work specifically?
        std::cout << "Input not double!" << std::endl;
        return 0.0;
    }
    return temp;

}

2 个答案:

答案 0 :(得分:1)

istream::ignore好吧,忽略接下来的N个字符或直到分隔符被击中。 3对我来说似乎是一个随机的幻数。或者你想知道什么?

答案 1 :(得分:0)

C ++标准保证('03标准中的第27.6.1.3 / 23条),传递std::numeric_limits<std::streamsize>::max()将忽略流中的所有内容,直到达到指定的分隔符或输入结尾。所以改变

std::cin.ignore(3);

std::cin.ignore(std::numeric_limits<std::streamsize>::max());

在调用3时使用ignore之类的幻数非常不合适。