【发布时间】:2017-08-07 20:19:46
【问题描述】:
我想将包含数据和字符的文本读入 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
【问题讨论】:
-
C++中的数组以索引
0开头,而不是1,所以应该是for (i = 0; i < p; i++)等等;此外,检查运算符>>的返回值,看看是否可以正确读取某个值。如果第一行包含除数字以外的任何内容,您的代码可能会失败,因为它会在将这个非数字作为数字读取时反复失败。 -
你能把它格式化成可读的东西吗 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 0 20 7 1 30 0 30 -0.194787 -0.373789 0.511419 -0.74886 30 0 跨度>
-
这是一个学习使用调试器并逐步检查代码以找出问题所在的好机会。
-
读取并丢弃带有
std::getline的第一行。之后,使用类似于if (! file >> A[i][j]) { std::cerr << "cannot parse input\n"; return -1; }的东西将文件读入数组。 -
@Ron
vectorofvectors 由于空间局部性差,速度很慢。vector或std::array会更好地假设(这是一个相当安全的假设)std::array不会做任何愚蠢的事情来破坏数据连续性。
标签: c++ arrays text character 2d