1

我无法使该atof()功能正常工作。我只希望用户输入值(以十进制数的形式),直到他们输入'|',然后打破循环。我希望这些值最初作为字符串读入,然后转换为双精度值,因为我在过去使用这种输入方法时发现,如果输入数字“124”,它会跳出循环,因为“124”是'|' 的代码 字符。

我环顾四周,发现了atof()显然将strings 转换为doubles 的函数,但是当我尝试转换时,我收到了消息

“不存在从 std::string 到 const char 的合适转换函数”。

我似乎无法弄清楚为什么会这样。

void distance_vector(){

double total = 0.0;
double mean = 0.0;
string input = " ";
double conversion = 0.0;
vector <double> a;

while (cin >> input && input.compare("|") != 0 ){
conversion = atof(input);
a.push_back(conversion);
}

keep_window_open();
}
4

2 回答 2

6

你需要

atof(input.c_str());

那将是有问题的“合适的转换功能”。

std::string::c_str 文档

const char* c_str() const;
获取等效的 C 字符串
返回指向数组的指针,该数组包含以空字符结尾的字符序列(即 C 字符串),表示字符串对象的当前值。

于 2013-07-12T16:06:32.723 回答
5

您还可以使用该strtod函数将字符串转换为双精度:

std::string param;  // gets a value from somewhere
double num = strtod(param.c_str(), NULL);

您可以查看文档strtod(例如man strtod,如果您使用的是 Linux / Unix)以查看有关此功能的更多详细信息。

于 2013-07-12T16:27:44.470 回答