Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从char[i]传递到double?_C++_Char_Double_Converter - Fatal编程技术网

C++ 如何从char[i]传递到double?

C++ 如何从char[i]传递到double?,c++,char,double,converter,C++,Char,Double,Converter,我将信息存储在一个char数组中,我希望将它们传递给一个双精度值。 举个例子,我想把它从 data[0]=3; data[1]=.; data[2]=1; data[3]=4; data[4]=1; data[5]=5; data[6]=1; 到 我怎么做? 谢谢 我假设您的数组实际上包含字符,而您只是忘记了撇号。我使用了一种更简单、更不容易出错的方法来初始化数据,还有一个额外的好处,就是我的版本实际上实现了零终止,而你的版本没有(正如阿克塞尔正确指出的那样) 解决办法是: #include

我将信息存储在一个char数组中,我希望将它们传递给一个双精度值。 举个例子,我想把它从

data[0]=3;
data[1]=.;
data[2]=1;
data[3]=4;
data[4]=1;
data[5]=5;
data[6]=1;

我怎么做? 谢谢

我假设您的数组实际上包含字符,而您只是忘记了撇号。我使用了一种更简单、更不容易出错的方法来初始化
数据
,还有一个额外的好处,就是我的版本实际上实现了零终止,而你的版本没有(正如阿克塞尔正确指出的那样)

解决办法是:

#include <cstdlib>

// ...
double number = std::strtod( data, NULL );
// ...
#包括
// ...
双精度数字=std::strtod(数据,空);
// ...

检查
stream()
以了解出错时的行为,以及如何使用第二个参数检查转换是否达到预期效果。

您可以根据需要使用
sstream
cstdlib
或(如果您使用的是C++11)中的函数
std::stringstream

引用
cplusplus.com

// stod example
#include <iostream>   // std::cout
#include <string>     // std::string, std::stod

int main ()
{
  std::string orbits ("365.24 29.53");
  std::string::size_type sz;     // alias of size_t

  double earth = std::stod (orbits,&sz);
  double moon = std::stod (orbits.substr(sz));
  std::cout << "The moon completes " << (earth/moon) << " orbits per Earth year.\n";
  return 0;
}
//stod示例
#include//std::cout
#包括//标准::字符串,标准::stod
int main()
{
标准:弦轨道(“365.24 29.53”);
std::string::size\u type sz;//size\u t的别名
双地球=std::stod(轨道和深浅);
双月=std::stod(轨道substr(sz));

std::cout第一个
数据的类型是什么
?还有“
数据[1]=;
”是非法的。第一个数据的类型是您可能要使用的字符!如果这应该是一个包含Pi的字符串,则舍入似乎不正确。3.14159265,仅供参考,这些值只是举个例子。我猜我是幸运地编写了Pi。我不推荐这些!我不推荐
sscanf()
用于解析,即使在C中也是如此。使用
sscanf()
比使用
strtol()
/
strtod()
和其他更专用的函数更难正确地进行错误恢复。(
%n”
?不是真的…)您还应该执行
数据[7]=“0”<代码>以避免Setrase.@ Axel:对,但不应该首先初始化一个字符数组。(-现在)它给你一个+1;;)应该是“代码> char data [] =“3.1415”;< <代码> >或者“代码> char const * data =“3.1415”;< /C> >,除了这是C++,所以在实践中,他将希望使用<代码> STD::String < /C>(但是,
strtod
可能仍然是相关的,特别是如果他没有C++11)。@JamesKanze:是的,
const
…这也是我的编译器一直告诉我的,我一直忘了;-)除此之外,他明确要求
char[]
。甚至是
std::string
我更喜欢运行
strtod()
超过了字符串流,因为后者对我的口味来说有点太重了。(实际的分析还没有完成,只是我的直觉。)而且很遗憾,有多少商业环境还没有采用C++11,所以…
strtod()
,值得信赖且无处不在。;-)
#include <cstdlib>

// ...
double number = std::strtod( data, NULL );
// ...
// stod example
#include <iostream>   // std::cout
#include <string>     // std::string, std::stod

int main ()
{
  std::string orbits ("365.24 29.53");
  std::string::size_type sz;     // alias of size_t

  double earth = std::stod (orbits,&sz);
  double moon = std::stod (orbits.substr(sz));
  std::cout << "The moon completes " << (earth/moon) << " orbits per Earth year.\n";
  return 0;
}