我正在从文本文件中读取数据,我需要从文件中读取 double 值。现在的问题是,如果 double 值无效,例如“!@#$%^&*”,那么我希望我的程序给出异常,以便我可以处理它。这是我的代码
void Employee::read(istream &is) {
try{
is.get(name, 30);
is >> salary;
char c;
while(is.peek()=='\n')
is.get( c );
}
catch(exception e){
}
}
最佳答案
这是一个验证双重输入的可运行示例。
#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";
}
产生的输出是..
All good on d1
Bad on d2
关于c++ - 在 C++ 中转换为 double 时处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10661321/