Моя программа на С++ выводит адрес вместо значения

У меня есть программа на С++, которая читает матрицу из файла. Он хранит все ненулевые значения и значения выше порога в двумерном векторе созданной мной структуры. Структура содержит значение и индекс этого значения. Когда я распечатываю все значения в векторе 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

Первая строка выводит количество строк в файле и количество ненулевых чисел в файле. Остальные строки выводят двумерный вектор. Сначала он печатает индекс числа, а затем само число.


person Sean Ryan    schedule 02.11.2015    source источник
comment
второй cout неверен в cout<< rows[i][j].index << " " << cout<< rows[i][j].val; и приводит к выводу указателя   -  person BeyelerStudios    schedule 02.11.2015
comment
Что такое тип NZ? Предположительно, это структура с двумя членами с именами index и val. Если они являются указателями (особенно если это указатель на что-то отличное от char), это объяснит вашу проблему. В качестве альтернативы, если они, в свою очередь, являются типом структуры/класса со своим собственным operator<<(), то этот оператор отвечает за форматирование вывода.   -  person Peter    schedule 02.11.2015
comment
@Peter NZ находится во фрагменте кода выше   -  person Simon Kraemer    schedule 02.11.2015
comment
@Peter NZ определяется в начале его кода. Я действительно считаю, что проблема просто в том, как я уже упоминал :)   -  person LBes    schedule 02.11.2015


Ответы (1)


Попробуйте удалить cout из этой строки:

cout<< rows[i][j].index << " " << cout<< rows[i][j].val;

Получить

cout<< rows[i][j].index << " " << rows[i][j].val;
person LBes    schedule 02.11.2015
comment
Да, это было, я не знаю, как я это пропустил - person Sean Ryan; 02.11.2015
comment
Дерьмо случается ;). Иногда вы просто упускаете очень очевидную вещь, если часами смотрите на свой собственный код. Свежий внешний взгляд на код всегда помогает :) - person LBes; 02.11.2015