Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

к примеру вот структура
C++
1
2
3
4
5
6
7
struct test_struct
{
 int a;
 wchar_t b[32];
 int c[10];
 float d;
}
Если можно с примером пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 14:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вывести данные структуры не ссылаясь на её поля (C++):

Структуры: ввести данные о работниках и вывести их данные, отсортированные по алфавиту - C++
Всем привет! Подскажите пожалуйста, что не так с моей функцией proverka? Мне нужно ввести данные о работниках и вывести их данные,...

Как вставить функцию (структура Студент (поля: ФИО и 4 оценки за экзамен) - вывести данные о студентах, сдавших сессию без троек) - C++
Дана информация о пяти студентах. Структура имеет поля: фамилия, имя отчество и 4 оценки за экзамен. Вывести данные о студентах, сдавших...

Структуры. Вывести данные об авиарейсе с максимальной скоростью - C++
Впервые работаю со структурой времени. Не могу понять как сделать. Сколько искал информации на эту тему, никак не найду. Помогите...

Вывести данные из файла, заданные в виде битового поля - C++
Задание, вывести данные из нескольких первых строк файла, причем эти данные должны быть заданны в виде битового поля. Какие форматы имеют...

Структуры, найти людей с одинаковыми именами и вывести данные о них в алфавитном порядке - C++
C++ Создать файл и записать в него исходные данные в виде структуры. Даны сведения о 5 Людей. Структура имеет вид: фамилия, имя,...

Как перебрать поля структуры? - C++
возможно ли это в с++ ? (c# - GetFields)

18
newbie666
Заблокирован
03.12.2013, 15:00 #2
и так, понеслась

только ты по конкретней расскажи, что ты имеешь ввиду под словом "вывести" ?
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 310
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];
}
а дальше как их выводить в стринг грид?
0
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 15:25 #4
Вы все неправильно делаете. У вас должен быть массив обьектов заданной структуры, состоящий из 19 элементов. Сначала сделайте массив, затем возвращайтесь к вопросу вывода.

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

Не по теме:

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

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

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

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

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

зы: что за стринг грид, в первый раз слышу?
что такое массив обьектов заданной структуры? это то что я сказал выше или другое
0
programina
1916 / 601 / 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;
}
1
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 310
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] и тд
как то используя указатель может быть или что то ещё... но писать каждое поле я точно не буду... я состарюсь раньше чем напишу эту программу
0
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 19:15 #11
Цитата Сообщение от lips Посмотреть сообщение
у меня 170+ структур... у каждой 30-50 полей
Если правильно понимаю, то все структуры отличаются друг от друга кол-вом полей. Тогда даже не знаю что подсказать, плохо представляю вашу задачу.

Добавлено через 2 минуты
А что из себя представляет этот стринг грид?
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 310
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 с типами и размерами элементов этих структур...
0
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 19:26 #13
Понятно, стринг грид - это некий обьект, в котором хранится матрица с ячейками, в таком случае, надо выводить данные прямо в эту матрицу.

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

Добавлено через 4 минуты
Может быть можно организовать чтение файлов с данными таким образом, что структуры вообще не нужны будут.
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 310
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];
а в смысле разных структур.. вообще непохожих... с разной размерностью
0
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
03.12.2013, 19:38 #15
Цитата Сообщение от lips Посмотреть сообщение
а в смысле разных структур.. вообще непохожих... с разной размерностью
Проблема в том, что вы их как то создали разными. То есть сначала увеличили энтропию, а теперь боретесь с этим хаосом.

Как выглядят исходные данные (текст, числа, где хранятся, как записаны и т.п.), которые вы записали в множество различных структур?
0
03.12.2013, 19:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 19:38
Привет! Вот еще темы с ответами:

Как редактировать поля структуры и как добавить новый элемент в вектор структур? - C++
Отзовитесь, пожалуйста, кто-то. Допустим есть структура struct worker { int exp; const char* name; const...

Как добраться до поля структуры являющейся элементом вектора? - C++
Здравствуйте. Всё просто: есть структура Face в которой есть три переменной типа float: a,b,c. Создаю вектор этой структуры vector&lt;Face&gt;...

Форма: как сделать используя данные таблицы из поля со списком, данные второго поля заносятся автоматически - MS Access
Добрый день уважаемые форумчане! Разрабатывается база по учету трудозатрат. 1.В таблицу заносится поле должностей и поле со...

Как вывести данные из одного текст-поля в другом? - Java
Как вывести данные из одного текст-поля в другом? Допустим, что есть два поля In, Out и кнопка. После нажатия на кнопку, текст из...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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