我正在使用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;
}
答案 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
之类的幻数非常不合适。