c++ - 从文件创建二维数组时遇到问题

标签 c++ arrays multidimensional-array

我在解析矩阵文件时遇到了一些麻烦。它看起来像这样:

#  Matrix made by matblas from blosum62.iij 
#  * column uses minimum score 
#  BLOSUM Clustered Scoring Matrix in 1/2 Bit Units 
#  Blocks Database = /data/blocks_5.0/blocks.dat 
#  Cluster Percentage: >= 62 
#  Entropy =  0.6979, Expected =  -0.5209 
  A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  Z  X  * 
A  4 -1 -2 -2  0 -1 -1  0 -2 -1 -1 -1 -1 -2 -1  1  0 -3 -2  0 -2 -1  0 -4 
R -1  5  0 -2 -3  1  0 -2  0 -3 -2  2 -1 -3 -2 -1 -1 -3 -2 -3 -1  0 -1 -4 
N -2  0  6  1 -3  0  0  0  1 -3 -3  0 -2 -3 -2  1  0 -4 -2 -3  3  0 -1 -4 
D -2 -2  1  6 -3  0  2 -1 -1 -3 -4 -1 -3 -3 -1  0 -1 -4 -3 -3  4  1 -1 -4 
C  0 -3 -3 -3  9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 
Q -1  1  0  0 -3  5  2 -2  0 -3 -2  1  0 -3 -1  0 -1 -2 -1 -2  0  3 -1 -4 
E -1  0  0  2 -4  2  5 -2  0 -3 -3  1 -2 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4 
G  0 -2  0 -1 -3 -2 -2  6 -2 -4 -4 -2 -3 -3 -2  0 -2 -2 -3 -3 -1 -2 -1 -4 
H -2  0  1 -1 -3  0  0 -2  8 -3 -3 -1 -2 -1 -2 -1 -2 -2  2 -3  0  0 -1 -4 
I -1 -3 -3 -3 -1 -3 -3 -4 -3  4  2 -3  1  0 -3 -2 -1 -3 -1  3 -3 -3 -1 -4 
L -1 -2 -3 -4 -1 -2 -3 -4 -3  2  4 -2  2  0 -3 -2 -1 -2 -1  1 -4 -3 -1 -4 
K -1  2  0 -1 -3  1  1 -2 -1 -3 -2  5 -1 -3 -1  0 -1 -3 -2 -2  0  1 -1 -4 
M -1 -1 -2 -3 -1  0 -2 -3 -2  1  2 -1  5  0 -2 -1 -1 -1 -1  1 -3 -1 -1 -4 
F -2 -3 -3 -3 -2 -3 -3 -3 -1  0  0 -3  0  6 -4 -2 -2  1  3 -1 -3 -3 -1 -4 
P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4  7 -1 -1 -4 -3 -2 -2 -1 -2 -4 
S  1 -1  1  0 -1  0  0  0 -1 -2 -2  0 -1 -2 -1  4  1 -3 -2 -2  0  0  0 -4 
T  0 -1  0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1  1  5 -2 -2  0 -1 -1  0 -4 
W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1  1 -4 -3 -2 11  2 -3 -4 -3 -2 -4 
Y -2 -2 -2 -3 -2 -1 -2 -3  2 -1 -1 -2 -1  3 -3 -2 -2  2  7 -1 -3 -2 -1 -4 
V  0 -3 -3 -3 -1 -2 -2 -3 -3  3  1 -2  1 -1 -2 -2  0 -3 -1  4 -3 -2 -1 -4 
B -2 -1  3  4 -3  0  1 -1  0 -3 -4  0 -3 -3 -2  0 -1 -4 -3 -3  4  1 -1 -4 
Z -1  0  0  1 -3  3  4 -2  0 -3 -3  1 -1 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4 
X  0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2  0  0 -2 -1 -1 -1 -1 -1 -4 
* -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4  1

它是更大程序的一部分,但首先我想在将它放入一个类之前单独检查它。所以我的代码看起来像这样:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

char readfile(char * file)
{
    int lines, cols;
    char matrix[30][30];
    ifstream ifs(file, ios::in);
    ifs.precision(2);
    ifs.setf(ios::fixed, ios::showpoint);
    ifs >> matrix[lines][cols];
    while(!ifs.eof())
    {
        string linijka;
        getline(ifs, linijka);
        if (linijka[0] != '#')
        {
            for (lines = 0; lines < 30; lines++)
            {
                for (cols = 0; cols < 30; cols++)
                {
                    return matrix[lines][cols];
                }
            }
        }
    } 

    ifs.close();
}

int main(int argc, char * argv[1])
{
    cout << "Matrix:\n" << readfile(argv[1]) << endl;
    return 0;
}

一切都编译无误。不幸的是矩阵是空的。执行后我收到这样的东西:

mateusz@viking:$ ./matpars submat/BLOSUM62.txt 
Matrix:

我需要它来从单元格 e 获取标记。 G。 [T][G].

有什么想法吗?我会非常感激。 ;-)

最佳答案

您的代码中存在一个基本问题:一旦它到达该 return 语句,该函数就会结束,并且您的文件的其余部分将不会被解析。

这就是您什么都看不到的原因;它仅打印出文件第一行中的第一个字符,而这恰好是第一个 A 列标记之前的空格。

编辑:实际上,仔细观察,似乎存在更重要的问题。您似乎期望第一个 ifs >> matrix 行为您将整个文件加载到数组中,但它做不到。

您似乎是一名初级程序员。老实说,我建议您从一种比 C++ 更简单的语言开始,例如 Python 或 Ruby。

关于c++ - 从文件创建二维数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831081/

相关文章:

c++ - Xerces-c SaxParser 问题

arrays - 循环跳过已经完成的值

python - 如何扩展 pyWavelets 以处理 N 维数据?

c - 在 C 中返回多维字符数组

javascript - 比较两个数组以检索值

Javascript/JQuery 来制作我定义的所有 DOM 元素的多维数组?

C++文件读取

c++ - 在C++中的for循环内为链表生成节点

python - 通过 Cython 将 C++ vector 传递给 Numpy,无需自动复制和处理内存管理

c++ - 使用指针数组中对象的函数