У меня есть программа на С++, которая читает матрицу из файла. Он хранит все ненулевые значения и значения выше порога в двумерном векторе созданной мной структуры. Структура содержит значение и индекс этого значения. Когда я распечатываю все значения в векторе 2d, он распечатывает индекс, но затем распечатывает то, что выглядит как адрес для значения.
Вот сам код:
#include <iostream>
#include <sstream>
#include <stdlib.h>
#include <vector>
#include <math.h>
struct NZ{
int index;
double val;
} nz;
using namespace std;
int main(int argc, const char* argv[]) {
string line;
int nonzero = 0;
int rowNum = 0;
double epsilon;
bool ep = false;
if (argc > 1 && string(argv[1]) == "-e")
{
epsilon = fabs(strtod(argv[2], 0));
ep = true;
}
vector< vector<NZ> > rows;
int linenum = -1;
while (getline(cin, line))
{
rowNum++;
rows.push_back( vector<NZ>() );
std::istringstream lstream(line) ;
double val;
linenum++;
int i = 1;
while (lstream>> val)
{
if(ep == true)
{
if (val != 0 && fabs(val) > epsilon){
nonzero++;
nz.val = val;
nz.index = i;
rows[linenum].push_back(nz);
}
}
else if (val != 0){
nonzero++;
nz.val = val;
nz.index = i;
rows[linenum].push_back(nz);
}
i++;
}
}
cout << rowNum << " " << nonzero;
for(int i=0; i<rows.size(); i++) {
cout << endl;
for(int j = 0;j<2;j++) {
cout<< rows[i][j].index << " " << cout<< rows[i][j].val;
}
}
}
Это входной файл:
0 -0.25 3 4
1 0.2 0.2 5
4 0 2 0.1
Вот что он выводит:
3 6
3 0x60626834 0x6062684
1 0x60626814 0x6062685
1 0x60626843 0x6062682
Вот что он должен вывести:
3 6
3 3 4 4
1 1 4 5
1 4 3 2
Первая строка выводит количество строк в файле и количество ненулевых чисел в файле. Остальные строки выводят двумерный вектор. Сначала он печатает индекс числа, а затем само число.
cout
неверен вcout<< rows[i][j].index << " " << cout<< rows[i][j].val;
и приводит к выводу указателя - person BeyelerStudios   schedule 02.11.2015NZ
? Предположительно, это структура с двумя членами с именамиindex
иval
. Если они являются указателями (особенно если это указатель на что-то отличное отchar
), это объяснит вашу проблему. В качестве альтернативы, если они, в свою очередь, являются типом структуры/класса со своим собственнымoperator<<()
, то этот оператор отвечает за форматирование вывода. - person Peter   schedule 02.11.2015NZ
находится во фрагменте кода выше - person Simon Kraemer   schedule 02.11.2015