Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
#1

Как вывести данные структуры не ссылаясь на её поля - C++

03.12.2013, 14:58. Просмотров 882. Ответов 18
Метки нет (Все метки)

к примеру вот структура
C++
1
2
3
4
5
6
7
struct test_struct
{
 int a;
 wchar_t b[32];
 int c[10];
 float d;
}
Если можно с примером пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 14:58     Как вывести данные структуры не ссылаясь на её поля
Посмотрите здесь:
Структуры: ввести данные о работниках и вывести их данные, отсортированные по алфавиту C++
C++ Как вставить функцию (структура Студент (поля: ФИО и 4 оценки за экзамен) - вывести данные о студентах, сдавших сессию без троек)
Структуры. Вывести данные об авиарейсе с максимальной скоростью C++
Вывести данные из файла, заданные в виде битового поля C++
Структуры, найти людей с одинаковыми именами и вывести данные о них в алфавитном порядке C++
C++ как перебрать поля структуры ?
C++ Как редактировать поля структуры и как добавить новый элемент в вектор структур?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
03.12.2013, 15:00     Как вывести данные структуры не ссылаясь на её поля #2
и так, понеслась

только ты по конкретней расскажи, что ты имеешь ввиду под словом "вывести" ?
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 15:19  [ТС]     Как вывести данные структуры не ссылаясь на её поля #3
Цитата Сообщение от newbie666 Посмотреть сообщение
и так, понеслась

только ты по конкретней расскажи, что ты имеешь ввиду под словом "вывести" ?
в стринг грид например... вывести данные которые есть в структуре

Добавлено через 5 минут
эти данные я получаю из файла... читаю к примеру 19 структур вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
size = 19;
char ** item = new char*[size];
for(int i=0;i<size ;i++)
{
     fs.read((char*)&size_struct[i], sizeof(int));
     fs.read((char*)&size_arr[i], sizeof(int));
     for(int j=0;j<=i;j++)
     {
          item[j]=new char[size_struct[i]*size_arr[i]];
     }
     fs.read((char*)item[i], size_struct[i]*size_arr[i]);
            pt[i] = (wchar_t*)&item[i][0];
}
а дальше как их выводить в стринг грид?
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 15:25     Как вывести данные структуры не ссылаясь на её поля #4
Вы все неправильно делаете. У вас должен быть массив обьектов заданной структуры, состоящий из 19 элементов. Сначала сделайте массив, затем возвращайтесь к вопросу вывода.

зы: что за стринг грид, в первый раз слышу?
Croessmah
03.12.2013, 15:31
  #5

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
зы: что за стринг грид, в первый раз слышу?
Скорее всего имеется ввиду компонент StringGrid - билдоровская приблуда

lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 15:36  [ТС]     Как вывести данные структуры не ссылаясь на её поля #6
Цитата Сообщение от programina Посмотреть сообщение
Вы все неправильно делаете. У вас должен быть массив обьектов заданной структуры, состоящий из 19 элементов. Сначала сделайте массив, затем возвращайтесь к вопросу вывода.

зы: что за стринг грид, в первый раз слышу?
ну такой имеется... всмысле в массиве типы структуры...
тоесть для вот этой структуры test_struct у меня массив такой:
char a[][] = "int", "wchar_t[32]", "int[10]", "float"
у меня сделано чтобы он формировался автоматически

в билдере есть компоненты один из них StringGrid
palva
2595 / 1817 / 260
Регистрация: 08.06.2007
Сообщений: 6,964
Записей в блоге: 4
03.12.2013, 15:45     Как вывести данные структуры не ссылаясь на её поля #7
Цитата Сообщение от lips Посмотреть сообщение
char a[][] = "int", "wchar_t[32]", "int[10]", "float"
И такой код си билдер компилирует?
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 17:34  [ТС]     Как вывести данные структуры не ссылаясь на её поля #8
Цитата Сообщение от palva Посмотреть сообщение
И такой код си билдер компилирует?
нет... ну это образно... сказал же что массив заполняется автоматически...
тоесть моя программа читает .h файл со структурами и для каждой структуры создаёт такой массив

Добавлено через 1 час 47 минут
Цитата Сообщение от programina Посмотреть сообщение
Вы все неправильно делаете. У вас должен быть массив обьектов заданной структуры, состоящий из 19 элементов. Сначала сделайте массив, затем возвращайтесь к вопросу вывода.

зы: что за стринг грид, в первый раз слышу?
что такое массив обьектов заданной структуры? это то что я сказал выше или другое
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 18:43     Как вывести данные структуры не ссылаясь на её поля #9
C++
// c++ main.cpp -o main -std=c++11
#include <iostream>
#include <clocale>
#include <string>
#include <fstream>
using namespace std;
 
const int N = 19;
 
struct test
{
    int a;
    string b;
    int c[10];
    float d;
};
 
 
int main()
{
    setlocale (LC_ALL,".866");
    
    // массив обьектов структуры test
    test obj[N];
    
    // заполнение обьектов данными из файла
    for(int i = 0; i < N; i++)
    {
        ifstream file("test.txt"); // 7 тест 0 1 2 3 4 5 6 7 8 9 3.14159
        file >> obj[i].a;
        file >> obj[i].b;
        for(int j = 0; j < 10; j++) file >> obj[i].c[j];    
        file >> obj[i].d;
        file.close();       
    }
 
    string s[N];
 
    // Вывод в файл без использования полей
    // возможно в стринг грид также выводится.
    for(int i = 0; i < N; i++)
    {
        ofstream file("test_out.txt");
        s[i] += to_string(obj[i].a) + " ";
        s[i] += obj[i].b + " ";
        for(int j = 0; j < 10; j++) 
            s[i] += to_string(obj[i].c[j]) + " ";
        s[i] += to_string(obj[i].d);
        file << s[i];
        file.close();   
    }   
 
    //for(int i = 0; i < N; i++) cout << s[i] << endl;
}
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 19:06  [ТС]     Как вывести данные структуры не ссылаясь на её поля #10
Цитата Сообщение от programina Посмотреть сообщение
C++
// c++ main.cpp -o main -std=c++11
#include <iostream>
#include <clocale>
#include <string>
#include <fstream>
using namespace std;
 
const int N = 19;
 
struct test
{
    int a;
    string b;
    int c[10];
    float d;
};
 
 
int main()
{
    setlocale (LC_ALL,".866");
    
    // массив обьектов структуры test
    test obj[N];
    
    // заполнение обьектов данными из файла
    for(int i = 0; i < N; i++)
    {
        ifstream file("test.txt"); // 7 тест 0 1 2 3 4 5 6 7 8 9 3.14159
        file >> obj[i].a;
        file >> obj[i].b;
        for(int j = 0; j < 10; j++) file >> obj[i].c[j];    
        file >> obj[i].d;
        file.close();       
    }
 
    string s[N];
 
    // Вывод в файл без использования полей
    // возможно в стринг грид также выводится.
    for(int i = 0; i < N; i++)
    {
        ofstream file("test_out.txt");
        s[i] += to_string(obj[i].a) + " ";
        s[i] += obj[i].b + " ";
        for(int j = 0; j < 10; j++) 
            s[i] += to_string(obj[i].c[j]) + " ";
        s[i] += to_string(obj[i].d);
        file << s[i];
        file.close();   
    }   
 
    //for(int i = 0; i < N; i++) cout << s[i] << endl;
}
нееет.... совсем не то.... объясню подробней:
у меня 170+ структур... у каждой 30-50 полей + массивы в ней и структуры в структуре... всего в итоге по примерно по 100-300 полей в каждой... представьте сколько мне придётся раз написать obj[i].a .... obj[i].c[j] и тд
как то используя указатель может быть или что то ещё... но писать каждое поле я точно не буду... я состарюсь раньше чем напишу эту программу
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 19:15     Как вывести данные структуры не ссылаясь на её поля #11
Цитата Сообщение от lips Посмотреть сообщение
у меня 170+ структур... у каждой 30-50 полей
Если правильно понимаю, то все структуры отличаются друг от друга кол-вом полей. Тогда даже не знаю что подсказать, плохо представляю вашу задачу.

Добавлено через 2 минуты
А что из себя представляет этот стринг грид?
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 19:16  [ТС]     Как вывести данные структуры не ссылаясь на её поля #12
Цитата Сообщение от lips Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
size = 19;
char ** item = new char*[size];
for(int i=0;i<size ;i++)
{
     fs.read((char*)&size_struct[i], sizeof(int));
     fs.read((char*)&size_arr[i], sizeof(int));
     for(int j=0;j<=i;j++)
     {
          item[j]=new char[size_struct[i]*size_arr[i]];
     }
     fs.read((char*)item[i], size_struct[i]*size_arr[i]);
            pt[i] = (wchar_t*)&item[i][0];
}
тоесть из этого кода... у меня pt[i] //pt это указатель на начало структуры, i это порядковый номер структуры...
могу я вывести отсюда все структуры одним циклом? если у меня есть массив char с типами и размерами элементов этих структур...
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 19:26     Как вывести данные структуры не ссылаясь на её поля #13
Понятно, стринг грид - это некий обьект, в котором хранится матрица с ячейками, в таком случае, надо выводить данные прямо в эту матрицу.

Добавлено через 3 минуты
А начальные данные в каком виде хранятся?

Добавлено через 4 минуты
Может быть можно организовать чтение файлов с данными таким образом, что структуры вообще не нужны будут.
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 19:31  [ТС]     Как вывести данные структуры не ссылаясь на её поля #14
Цитата Сообщение от programina Посмотреть сообщение
Понятно, стринг грид - это некий обьект, в котором хранится матрица с ячейками, в таком случае, надо выводить данные прямо в эту матрицу.
да это без разницы куда выводить на самом деле... мне только способ... если идти указателем по этой структуре и каждый раз делать приведения типа :
C++
1
2
3
4
(int)*pt[i];
pt[i]+=4;
(char)*pt[i];
pt[i]++;
всё получается ок... всё выводится прекрасно... но умные люди на этом форуме говорят что так делать нельзя... там могут быть в памяти дыры и вообщем закритиковали мой способ... прошу предложить в таком случае более оптимальный если он есть... извиняюсь за неконкретность поставленого вопроса... я новичок в c++
ещё раз
много структур это не
C++
1
2
3
4
5
struct a
{
 int a;
 int b;
} aa[100500];
а в смысле разных структур.. вообще непохожих... с разной размерностью
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 19:38     Как вывести данные структуры не ссылаясь на её поля
Еще ссылки по теме:
C++ Как добраться до поля структуры являющейся элементом вектора?
Как распарсить строку и положить данные в элементы структуры C++
Как вывести элементы типа string из структуры? C++
C++ Как массово вывести значения всех элементов структуры?
Закрытые поля структуры. C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 19:38     Как вывести данные структуры не ссылаясь на её поля #15
Цитата Сообщение от lips Посмотреть сообщение
а в смысле разных структур.. вообще непохожих... с разной размерностью
Проблема в том, что вы их как то создали разными. То есть сначала увеличили энтропию, а теперь боретесь с этим хаосом.

Как выглядят исходные данные (текст, числа, где хранятся, как записаны и т.п.), которые вы записали в множество различных структур?
Yandex
Объявления
03.12.2013, 19:38     Как вывести данные структуры не ссылаясь на её поля
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru