2014-01-14 3 views
0

В следующем коде:не может прочитать строку в матрице

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, но не сохраняю значения чисел с плавающей запятой co правильно в массив xyz. Я чувствую, что это проблема ссылок/разыгрышей, но я не понимаю, что я делаю неправильно.

Если я попытаюсь прочитать значения непосредственно на xyzs[iat][0] вместо &xyzs[iat][0], я получаю ошибку seg.

ответ

2

Использовать %f для float переменных.

Использовать %lf для double переменных.

Смежные вопросы