正在尝试在条件下将字符串转换为双精度
Trying to convert a string to double under conditions
我有一个函数,它使用std字符串参数来测试是否有alpha字符。最好只测试数字字符,但我还没有做到这一点。我只是想让它识别输入中是否没有数字。如果没有,它会循环错误消息,直到只有数字。在这之后,我试图通过使用atof()将字符串转换为double,这样它就可以在main()中返回。我得到一个调试断言失败!运行时的消息,如果输入了数字,则表示表达式字符串下标超出范围。另一方面,如果有字母输入,则会继续循环使用错误消息。我得到了下面函数的代码。有人知道我做错了什么吗?我没主意了。。。
double Bet::betProb(std::string b)
{
bool alphChar = false;
double doubleBet;
for(int i = 0; i < b.size(); i++){
if(isalpha(b[i])){
alphChar = true;
}
}
while(alphChar){
cout << "Error! Bet only with numbers." << endl;
cin >> b;
for(int i = 0; i < b.size(); i++){
if(!isalpha(b[i])){
alphChar = false;
}
}
}
string F=b;
int T=F.size();
char Change[100];
for (int a=0;a<=T;a++)
{
Change[a]=F[a];
}
doubleBet = atof(Change);
return doubleBet;
}
由于您的问题已经解决,我想我会向您展示使用标准C++功能的方法:
#include <string>
#include <stdexcept>
double Bet::betProb(const std::string& str)
{
double d;
try {
d = std::stod(str);
} catch (const std::invalid_argument&) {
std::cerr << "Argument is invalidn";
throw;
} catch (const std::out_of_range&) {
std::cerr << "Argument is out of range for a doublen";
throw;
}
return d;
}
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何从字符串转换为双精度*
- C++如何将字符串逐行转换为双精度
- 如何防止双精度值到整数的隐式转换
- 如果存在从"双精度"到"T"的转换,则禁用构造函数
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将双精度值转换为 char 变量时字符串流如何工作
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在 c++ 中从双精度转换为字符串
- 如何在C++中将无符号字符缓冲区转换为双精度?
- 从字符串转换为双精度和整数 - C++
- 如何使用按位运算将随机uint64_t转换为范围 (0, 1) 的随机双精度
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- 表达式中应用的转换(双精度为整数)
- 无法转换双精度 - 新运算符
- C++类型转换双精度