0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
1

Инициализация массива структур и форматированный вывод значений её членов

04.09.2016, 10:11. Показов 2716. Ответов 17

Author24 — интернет-сервис помощи студентам
Я написал маленькую программу инициализации массива структур и форматированного вывода значений её членов, но, и инициализация происходит с ошибкой, и на форматированный вывод компилятор ругается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
    struct phisbox
    {
        float mass;
        unsigned int color;
    };
    struct box
    {
        int width;
        int height;
        int depth;
        phisbox phis;
    };
    void setboxarray(struct box*, int);
    void printboxarray(struct box*, int);
    int main(int argc, char **argv)
    {
        box boxarray[10];
        setboxarray(&boxarray[10], 10); // Вызов функции заполнения членов структуры.
        printboxarray(&boxarray[10], 10); // Вызов функции вывода значений членов структуры.
        return 0;
    }
    void setboxarray(struct box *pbox, int N)
    {
        int w =1, h = 1, d = 1;
        float m = 1.2F;
        unsigned int c = 0X00FF00U;
        for(int i = 0;i < N;i++)
        {
            pbox->width = w;
            pbox->height = h;
            pbox->depth = d;
            pbox->phis.mass = m;
            pbox->phis.color = c;
            pbox++;
            w++;
            h += 2;
            d += 3;
            m *= 2;
            c += 0X100;
        }
    }
    void printboxarray(struct box *pbox, int N)
        {
            std::cout << "Таблица физических характеристик коробок:" << std::endl;
            std::cout << "Ширина коробки" << "Высота коробки" << "Длина коробки" << "Масса коробки" << "Шестнадцатиричный код цвета коробки" << std::endl;
            for(int i = 0;i < N;i++)
            {
                std::cout.width(15);
                std::cout << pbox->width << pbox->height << pbox->depth;
                std::cout.setf(std::ios::fixed);
                std::cout.setf(std::ios::setprecision(3)) << pbox->phis.mass;
                std::cout.setf(std::ios::hex) << pbox->phis.color;
                std::endl;
                pbox++;
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2016, 10:11
Ответы с готовыми решениями:

Инициализация и вывод значений массива
Задача(ликвидировать мое незнание ) Всем привет! Столкнулся с проблемой, давно у нас не было...

Вывод нескольких значений в бинарном поиске из массива структур
Существует массив структур. Структура: struct StructWords { char Word; char Name; }; В этой...

Инициализация структур и не вывод строчки char*
Это вопрос не вопрос как делать. Это вопрос: &quot;Почему такие результаты&quot;. struct A { ...

Инициализация массива структур
Создал массив структур. По задумке, хочу чтобы это массив получал свои значения в функции. Не могу...

17
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
04.09.2016, 10:20 2
C++
1
    std::endl;
Откуда вы такое (и всё остальное) почерпнули?
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
04.09.2016, 10:29 3
kokzahvas,
C++
1
2
setboxarray(boxarray, 10); // boxarray это и есть указатель , не нужно &
 printboxarray(boxarray, 10);
Добавлено через 2 минуты
kokzahvas, Вот, но с выравниваниями у вас проблемы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <iomanip>
    struct phisbox
    {
        float mass;
        unsigned int color;
    };
    struct box
    {
        int width;
        int height;
        int depth;
        phisbox phis;
    };
    void setboxarray(struct box*, int);
    void printboxarray(struct box*, int);
    int main()
    {    setlocale(LC_ALL,"RUS");
        box boxarray[10];
        setboxarray(boxarray, 10); // Вызов функции заполнения членов структуры.
        printboxarray(boxarray, 10); // Вызов функции вывода значений членов структуры.
        return 0;
    }
    void setboxarray(struct box *pbox, int N)
    {
        int w =1, h = 1, d = 1;
        float m = 1.2F;
        unsigned int c = 0X00FF00U;
        for(int i = 0;i < N;i++)
        {
            pbox->width = w;
            pbox->height = h;
            pbox->depth = d;
            pbox->phis.mass = m;
            pbox->phis.color = c;
            pbox++;
            w++;
            h += 2;
            d += 3;
            m *= 2;
            c += 0X100;
        }
    }
    void printboxarray(struct box *pbox, int N)
        {
            std::cout << "Таблица физических характеристик коробок:" << std::endl;
            std::cout << "Ширина коробки" << "Высота коробки" << "Длина коробки" << "Масса коробки" << "Шестнадцатиричный код цвета коробки" << std::endl;
            for(int i = 0;i < N;i++)
            {
                std::cout.width(15);
                std::cout << pbox->width << pbox->height << pbox->depth;
                std::cout.setf(std::ios::fixed);
                std::cout << std::setprecision(3)<< pbox->phis.mass;
                std::cout.setf(std::ios::hex) << pbox->phis.color;
                
                pbox++;
            }
        }
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
05.09.2016, 08:52  [ТС] 4
Цитата Сообщение от Peoples Посмотреть сообщение
kokzahvas,
C++
1
2
setboxarray(boxarray, 10); // boxarray это и есть указатель , не нужно &
 printboxarray(boxarray, 10);
Пишет: «Cannot convert 'box' to 'box*' for argument '1' to 'void setboxarray(box*, int)'» и «Cannot convert 'box' to 'box*' for argument '1' to 'void printboxarray(box*, int)'»

Добавлено через 4 минуты
Цитата Сообщение от castaway Посмотреть сообщение
C++
1
    std::endl;
Откуда вы такое (и всё остальное) почерпнули?
Я всегда так пишу. Когда namespace на общем уровне не импортируешь, командой: «using namespace std», к нему можно через «::» обращаться.

Добавлено через 11 минут
Цитата Сообщение от Peoples Посмотреть сообщение
kokzahvas, Вот, но с выравниваниями у вас проблемы.
У меня с форматированным выводом всегда были проблемы. А вы не могли бы подсказать, как его оформить?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.09.2016, 09:40 5
Цитата Сообщение от kokzahvas Посмотреть сообщение
Я всегда так пишу.
C++
1
2
3
4
5
6
#include <iostream>
#include <iomanip>
 
int main() {
    std::endl;
}
У вас скомпилируется такая программа?
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
05.09.2016, 12:09 6
Цитата Сообщение от kokzahvas Посмотреть сообщение
Я всегда так пишу.
Тогда уж так:
C++
1
std::endl(std::cout);
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
05.09.2016, 12:46  [ТС] 7
Цитата Сообщение от castaway Посмотреть сообщение
C++
1
2
3
4
5
6
#include <iostream>
#include <iomanip>
 
int main() {
    std::endl;
}
У вас скомпилируется такая программа?
«std::endl;» - так не скомпилируется, а так: «std::cout << std::endl;» - скомпилируется равно как и «end;» - не скомпилируется, а: «cout << end;» - скомпилируется, при условии что есть «using namespace std;»
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.09.2016, 12:48 8
kokzahvas, тогда с какой стати ваш код должен скомпилироваться, если по вашей же логике 54-я строка содержит ошибку?
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
05.09.2016, 13:03  [ТС] 9
Цитата Сообщение от castaway Посмотреть сообщение
kokzahvas, тогда с какой стати ваш код должен скомпилироваться, если по вашей же логике 54-я строка содержит ошибку?
Извиняюсь, сразу не заметил. Исправил, но компилятор всё равно ругается. Теперь на 52-ую строку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
    struct phisbox
    {
        float mass;
        unsigned int color;
    };
    struct box
    {
        int width;
        int height;
        int depth;
        phisbox phis;
    };
    void setboxarray(struct box*, int);
    void printboxarray(struct box*, int);
    int main(int argc, char **argv)
    {
        box boxarray[10];
        setboxarray(&boxarray[10], 10); // Вызов функции заполнения членов структуры.
        printboxarray(&boxarray[10], 10); // Вызов функции вывода значений членов структуры.
        return 0;
    }
    void setboxarray(struct box *pbox, int N)
    {
        int w =1, h = 1, d = 1;
        float m = 1.2F;
        unsigned int c = 0X00FF00U;
        for(int i = 0;i < N;i++)
        {
            pbox->width = w;
            pbox->height = h;
            pbox->depth = d;
            pbox->phis.mass = m;
            pbox->phis.color = c;
            pbox++;
            w++;
            h += 2;
            d += 3;
            m *= 2;
            c += 0X100;
        }
    }
    void printboxarray(struct box *pbox, int N)
        {
            std::cout << "Таблица физических характеристик коробок:" << std::endl;
            std::cout << "Ширина коробки" << "Высота коробки" << "Длина коробки" << "Масса коробки" << "Шестнадцатиричный код цвета коробки" << std::endl;
            for(int i = 0;i < N;i++)
            {
                std::cout.width(15);
                std::cout << pbox->width << pbox->height << pbox->depth;
                std::cout.setf(std::ios::fixed);
                std::cout.setf(std::ios::setprecision(3)) << pbox->phis.mass; // Ошибка: «'setprecision' is a not member of 'std::ios {aka std::basic_ios<char>}'».
                std::cout.setf(std::ios::hex) << pbox->phis.color;
                std::cout << std::endl;
                pbox++;
            }
        }
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.09.2016, 13:12 10
Цитата Сообщение от kokzahvas Посмотреть сообщение
Исправил, но компилятор всё равно ругается. Теперь на 52-ую строку.
Откуда вы берёте такие конструкции?
#include <iomanip>
std::cout << std::setprecision( 3 ) << pbox->phis.mass;
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
06.09.2016, 11:23  [ТС] 11
Всё. Исправил. Компилятор больше не ругается. Зато теперь вывод кривой + выходит сообщение: «Process exited with code 6» - что оно означает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <iomanip>
    struct phisbox
    {
        float mass;
        unsigned int color;
    };
    struct box
    {
        int width;
        int height;
        int depth;
        phisbox phis;
    };
    void setboxarray(struct box*, int);
    void printboxarray(struct box*, int);
    int main(int argc, char **argv)
    {
        box boxarray[10];
        setboxarray(&boxarray[10], 10); // Вызов функции заполнения членов структуры.
        printboxarray(&boxarray[10], 10); // Вызов функции вывода значений членов структуры.
        return 0;
    }
    void setboxarray(struct box *pbox, int N)
    {
        int w =1, h = 1, d = 1;
        float m = 1.2F;
        unsigned int c = 0X00FF00U;
        for(int i = 0;i < N;i++)
        {
            pbox->width = w;
            pbox->height = h;
            pbox->depth = d;
            pbox->phis.mass = m;
            pbox->phis.color = c;
            pbox++;
            w++;
            h += 2;
            d += 3;
            m *= 2;
            c += 0X100;
        }
    }
    void printboxarray(struct box *pbox, int N)
        {
            std::cout.width(15);
            std::cout << "Таблица физических характеристик коробок:" << std::endl;
            std::cout.width(15);
            std::cout << "Ширина коробки" << "Высота коробки" << "Длина коробки" << "Масса коробки" << "Шестнадцатиричный код цвета коробки" << std::endl;
            for(int i = 0;i < N;i++)
            {
                std::cout.width(15);
                std::cout << pbox->width << pbox->height << pbox->depth;
                std::cout.setf(std::ios::fixed);
                std::cout << pbox->phis.mass;
                std::cout.setf(std::ios::hex) << pbox->phis.color;
                std::cout << std::endl;
                pbox++;
            }
        }
Добавлено через 21 час 59 минут
Я ещё раз исправил весь код. Теперь, ни компилятор, ни консоль не каких ошибок не выводит, но вывод всё равно не правильный. Проверьте у себя, у кого какой вывод.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <iomanip>
    struct phisbox
    {
        float mass;
        unsigned int color;
    };
    struct box
    {
        int width;
        int height;
        int depth;
        phisbox phis;
    };
    void setboxarray(struct box[], int);
    void printboxarray(struct box[], int);
    int main(int argc, char **argv)
    {
        box boxarray[10];
        setboxarray(boxarray, 10); // Вызов функции заполнения членов структуры.
        printboxarray(boxarray, 10); // Вызов функции вывода значений членов структуры.
        return 0;
    }
    void setboxarray(struct box box0[], int N)
    {
        int w =1, h = 1, d = 1;
        float m = 1.2F;
        unsigned int c = 0X00FF00U;
        for(int i = 0;i < N;i++)
        {
            box0[i].width = w;
            box0[i].height = h;
            box0[i].depth = d;
            box0[i].phis.mass = m;
            box0[i].phis.color = c;
            w++;
            h += 2;
            d += 3;
            m *= 2;
            c += 0X100;
        }
    }
    void printboxarray(struct box box0[], int N)
        {
            std::cout << "Таблица физических характеристик коробок:" << std::endl;
            std::cout << std::setw(15) << "Ширина коробки" << "Высота коробки" << "Длина коробки" << "Масса коробки" << std::setw(33) << "Шестнадцатиричный код цвета коробки" << std::endl;
            for(int i = 0;i < N;i++)
            {
                std::cout << std::setw(15) << box0[i].width << box0[i].height << box0[i].depth << std::fixed << std::setprecision(3) << box0[i].phis.mass << std::hex << box0[i].phis.color << std::endl;
            }
        }
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
06.09.2016, 11:29 12
Лучший ответ Сообщение было отмечено kokzahvas как решение

Решение

Цитата Сообщение от kokzahvas Посмотреть сообщение
Проверьте у себя, у кого какой вывод.
У всех одинаковый вывод.

C++
1
2
3
4
5
6
7
8
9
10
            std::cout << "   Ширина коробки" << "   Высота коробки" << "   Длина коробки" << "   Масса коробки" << "   Шестнадцатиричный код цвета коробки" << std::endl;
            for(int i = 0;i < N;i++)
            {
                std::cout << std::setw(15) << box0[i].width;
                std::cout << std::setw(15) << box0[i].height;
 
                /// ... и т.д. ...
 
                std::cout << std::endl;
            }
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
06.09.2016, 12:16  [ТС] 13
Цитата Сообщение от castaway Посмотреть сообщение
У всех одинаковый вывод.
А у меня вот такой вывод. см. скриншот.
Я сделал парочку проверок и выяснил, что у меня ошибка не в форматированном выводе значений членов структуры, а в алгоритме инициализации значений членов массива структур. Алгоритм функции setboxarray написан направильно, а почему не понимаю. Она должна присавивать разным членам разных структур разные значения, а она присваивает только одному члену «boxarray[].height» каждой структуры нужной значение, а остальный члены каждой структуры остаются пустыми. А почему, не понимаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    void setboxarray(struct box box0[], int N)
    {
        int w =1, h = 1, d = 1;
        float m = 1.2F;
        unsigned int c = 0X00FF00U;
        for(int i = 0;i < N;i++)
        {
            box0[i].width = w;
            box0[i].height = h;
            box0[i].depth = d;
            box0[i].phis.mass = m;
            box0[i].phis.color = c;
            // Изменение значений членов следующей структуры.
            w++;
            h += 2;
            d += 3;
            m *= 2;
            c += 0X100;
        }
    }
Миниатюры
Инициализация массива структур и форматированный вывод значений её членов  
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
06.09.2016, 12:20 14
Цитата Сообщение от kokzahvas Посмотреть сообщение
а она присваивает только одному члену «boxarray[].height» каждой структуры нужной значение, а остальный члены каждой структуры остаются пустыми.
Вы до сих пор не поняли что у вас вывод неправильный? Кто будет ставить пробелы между значениями? Кто будет читать то, что ему пишут?
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
07.09.2016, 07:44  [ТС] 15
Цитата Сообщение от castaway Посмотреть сообщение
Вы до сих пор не поняли что у вас вывод неправильный? Кто будет ставить пробелы между значениями? Кто будет читать то, что ему пишут?
Сейчас-то я вроде все пробелы исправил. Разве нет?
C++
1
2
3
4
5
6
7
8
9
    void printboxarray(struct box box0[], int N)
        {
            std::cout << "Таблица физических характеристик коробок:" << std::endl;
            std::cout << std::setw(15) << "Ширина коробки" << "Высота коробки" << "Длина коробки" << "Масса коробки" << std::setw(33) << "Шестнадцатиричный код цвета коробки" << std::endl;
            for(int i = 0;i < N;i++)
            {
                std::cout << std::setw(15) << box0[i].width << box0[i].height << box0[i].depth << std::fixed << std::setprecision(3) << box0[i].phis.mass << std::hex << box0[i].phis.color << std::endl;
            }
        }
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
07.09.2016, 09:51 16
Нет.
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
07.09.2016, 11:24  [ТС] 17
Цитата Сообщение от castaway Посмотреть сообщение
Нет.
А можете на примере показать, где ошибки?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
07.09.2016, 12:13 18
Пример в 12-м сообщении.
0
07.09.2016, 12:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2016, 12:13
Помогаю со студенческими работами здесь

Инициализация массива структур
суть в чем. есть структура SS полем которой является матрица S. есть массив x - содержащий 8...

Инициализация массива структур
Подскажите как инициализировать целый массив со структурами. Вот пример инициализации структуры....

Инициализация массива структур
Почему после инициализации первого массива программа выходит из цикла ? как сделать чтобы...

Инициализация массива структур
struct predmet //создаем еще одну структуру, чтобы вложить ее { char *npred; int mark; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru