C ++将txt数据和char读入2D数组

时间:2017-08-07 20:19:46

标签: c++ arrays text character 2d

我想将文本读入arrayA [] [],其中包括数据和字符。好像是

然后我需要计算数据。我的代码不能这样做。我尝试输出A [] []以查看是否有任何错误,结果证明所有元素都是0.000。请帮我看看如何更改它。谢谢!

enter code here

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>
#include <limits>
int    p = 518868;
int    q = 11;
int    s, t, i, j, k, m, d, r, u;
double A[518868][11];
int    main(void)
{

    FILE  *fid;

    using namespace std;

    ifstream file("dump600.txt");

    if (file.is_open())
      {
        for (i = 1; i <= p; i++)
          {
            for (j = 1; j <= q; j++)
              {
                file >> A[i][j];
              }
          }
      }



fid = fopen("RstA600.txt", "wt");
for (i = 1; i <= 10000; i++)
{
    for (j = 1; j <= 11; j++)
    {
        if (j == 11)
        {
           fprintf(fid, "%f\n", A[i][j]);
        }
        else
        {
            fprintf(fid, "%f\t", A[i][j]);
        }
    }
}
fclose(fid);

dump600.txt
id  type x  y   z   c_q[1]       c_q[2]     c_q[3]       c_q[4]    x    y
1   1    0  0   30  -0.0075608  -0.710037   0.703789    0.021699    0   0
3   1    10 0   30  0.0138984   -0.409617   0.0338428   -0.911523   10  0
5   1    20 0   30  -0.31169    -0.685503   0.450455    0.479609    20  0
7   1    30 0   30  -0.194787   -0.373789   0.511419    -0.74886    30  0

1 个答案:

答案 0 :(得分:1)

问题似乎是包含文本的第一行,它会让任何file >> A[i][j]失败。要解决此问题,您可以使用std::getline跳过第一行;还考虑以某种方式对无效输入作出反应。此外,C ++中的索引以0开头,而不是1,因此for (j = 1; j <= q; j++)等等超出边界并产生未定义的行为。查看应该有效的代码示例:

  if (file.is_open())
  {
    std::string line;
    if(std::getline(file, line)) {
      for (i = 0; i < p; i++)
      {
          for (j = 0; j < q; j++)
          {
             if (!file >> A[i][j]) {
                cout << "Invalid input.";
             }
          }
      }
    }
  }