c++ - 无法将字符串读入矩阵

标签 c++ arrays string segmentation-fault

在下面的代码中:

  atnames = new char[natoms];
  xyzs = new double*[natoms];
  for(int iat=0;iat<natoms;iat++)
  {
    int idum1;
    xyzs[iat] = new double[3];
    for(int ii = 0; ii<3; ii++)
    {
      xyzs[iat][ii] = 0.0;
    }
    getline(finp, tline);
    sscanf(tline.c_str(), "%c(%i) %f %f %f ATOM", &atnames[iat], &idum1, &xyzs[iat][0], &xyzs[iat][1], &xyzs[iat][2]);
  }

  for(int iat=0; iat<natoms; iat++)
  {
    cout << atnames[iat] << iat+1 << ":" << xyzs[iat][0] <<  " " << xyzs[iat][1] << " " << xyzs[iat][2] << endl;
  }

我正在尝试阅读这些行:

O(1)       1.23799   0.00000   0.00000 ATOM
N(2)      -0.75911   1.08623   0.00000 ATOM
C(3)       0.00000  -0.00000   0.00000 ATOM
H(4)      -1.75297   0.97208   0.03384 ATOM
H(5)      -0.30916   1.98585  -0.01442 ATOM
H(6)      -0.52646  -0.95018   0.03999 ATOM

但是,当我打印出这些值时,我得到:

O1:5.27341e-315 0 0
N2:1.58536e-314 5.26712e-315 0
C3:0 0 0
H4:1.59047e-314 5.26123e-315 5.05975e-315
H5:1.58004e-314 5.3044e-315 1.56185e-314
H6:1.58343e-314 1.58694e-314 5.06791e-315

所以我显然正确读取了第一个 char,但没有将 float 的值正确存储到数组 xyz 中。我觉得这是一个引用/取消引用问题,但我不清楚我做错了什么。

如果我尝试将值直接读取到 xyzs[iat][0] 而不是 &xyzs[iat][0],我会遇到段错误。

最佳答案

%f 用于float 变量。

%lf 用于double 变量。

关于c++ - 无法将字符串读入矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125032/

相关文章:

c++ - OpenMP:并行运行两个函数,每个函数占线程池的一半

java - 解析 JSON - JSONException : Integer cannot be converted to JSONObject

javascript - 如何创建一个由用户指定尺寸的二维数组(在 jQuery 中)

java - 如何在正则表达式中添加每次都会更改的字符?

android - 字符串资源中的电子邮件

c++ - 网站 coderbyte 上的 'gets(stdin)' 是怎么回事?

c++ - 为什么这个 C++ 程序会出现段错误?

c++ - 我可以有一个跨平台跨技术的解决方案吗?

java - java中设置数组的方法

C - 将字符串从一个文件递归反转到另一个文件