0

我正在尝试将文本文件中的数据读取到矩阵中。文本文件如下所示。

Object data
Format 6
1 5241.365147 -77215.356982 248612.514352 0.000014 0.000009 0.000051
2 5242.871592 -77213.351692 248614.103512 0.000013 0.000008 0.000052
...

我已经在这个站点上搜索了以前的答案以寻找类似的问题,并编写了以下代码。

#include <iostream>
#include <fstream>
#include <vector>

using namespace std

int main ()
{
// Initialize variables
int i, j, i_max, j_max;
i_max = 7;
j_max = 4;

//Open the input file
ifstream infile;
infile.open ("data.txt");

//Loop through the values in the text file
double data [i_max][j_max];
for (i=0; i<i_max; i++) {
    for (j=0; j<j_max; j++) {
        infile >> data[i][j];
        printf ("%d\n", data[i][j]); //Check the input 
    }
}

return 0;
}

我遇到的问题是我用来检查输入的 printf 语句只将 j_max 的值写入终端。任何帮助,将不胜感激。

4

3 回答 3

1

修复如下:-

i_max = 4; //this is no. of rows  
j_max = 7; // this is no. of cols 

std::string dummy;
getline(infile,dummy); //Skip 1st line "Object data"
getline(infile,dummy); //Skip 2nd line "Format 6"

double data [i_max][j_max];
for (i=0; i<i_max; i++) {
    for (j=0; j<j_max; j++) {
        infile >> data[i][j];
        // Use %f format specifier for floats
            printf ("%f\n", data[i][j]);  
    }
}

另外,请不要混合使用 C 和 C++

于 2013-08-22T12:52:34.250 回答
0

这真的会成为您输入文件的一部分吗?

Object data
Format 6

如果是这样,只需跳过这些行,如下所示:

char s[10];
infile.getline(s, 5);
infile.getline(s, 5);

我使用 char 数组“s”将前 5 个字符从整行复制到其中。当您调用 getline() 时,阅读器会加载所有行,因此无论您阅读了多少行,都将被跳过。并确保您已声明,以便您可以使用 getline 函数。

#include <string.h>

如果我帮助了你,请告诉我。

于 2013-08-22T12:23:48.457 回答
0

除了数据文件解析和缺少分号之外,问题在于 printf。"d" 是 int 的格式代码,但您传递的是双精度。您需要使用“g”。或者更好的是,标准 C++ 流。

如果您打开警告,GCC 会告诉您这一点。通常,使用:“-Wall -Wextra”,或者在这种特殊情况下使用“-Wformat”。

于 2013-08-22T12:32:39.283 回答