这是验证双重输入的可运行示例。
#include<iostream>
#include<sstream>
#include<limits>
using std::numeric_limits;
int main(){
std::string goodString = "12.212", badString = "!@$&*@";
std::istringstream good(goodString), bad(badString);
double d1=numeric_limits<double>::min(),
d2=numeric_limits<double>::min();
std::string tmp;
good >> d1;
if (d1 == numeric_limits<double>::min()) {
// extraction failed
d1 = 0;
good.clear(); // clear error flags to allow further extraction
good >> tmp; // consume the troublesome token
std::cout << "Bad on d1\n";
} else std::cout << "All good on d1\n";
if (d2 == numeric_limits<double>::min()) {
d2 = 0;
bad.clear();
bad >> tmp;
std::cout << "Bad on d2\n";
} else std::cout << "All good on d2\n";
}
产生的输出是..
d1 一切顺利
d2不好