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

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

Войти
Регистрация
Восстановить пароль
 
RamzezUA
1 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 56
Завершенные тесты: 1
#1

Обращение к массиву структур, почему именно так? - C++

21.07.2016, 21:24. Просмотров 171. Ответов 1
Метки нет (Все метки)

Почему в не которых функциях к елементам структуры обращаются *invtry[] , а в других просто invtry[]?
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <stdafx.h>
#include <iostream>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <windows.h>
using namespace std;
 
const int SIZE = 150;
 
struct inv_type
{
    char item [40]; // наименование товара.
    double cost;    // стоимость. 
    double retail;  // розничная цена.
    int on_hand;    // имеющееся в наличии количество.
    int lead_time;  // число дней до пополнения запасов.
} invtry [SIZE];
 
void enter ();
void init_list ();
void display ();
void update ();
void input (int i);
int menu ();
 
int main ()
{
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
 
    char choice;
 
    init_list ();
 
    for(;;) 
    {
        choice = menu ();
 
        switch (choice)
        {
        case 'e': 
            enter ();
            break;
 
        case 'd': 
            display ();
            break;
 
        case 'u': 
            update ();
            break;
 
        case 'q': 
            return 0;
        }
    }
}
 
// Инициализация массива структур.
void init_list ()
{
    int t;
    for (t = 0; t < SIZE; t++) 
        *invtry[t].item = '\0';
}
 
 
// Ввод элементов в инвентарную ведомость.
void enter ()
{
    int i;
 
    // находим первую свободную структуру.
    for(i = 0; i < SIZE; i++)
        if(!*invtry[i].item) break;
 
    // Если массив полон, значение i будет равно SIZE.
    if(i == SIZE)
    {
        cout << "Список полон.\n";
        return;
    }
 
    input(i);
}
 
// Ввод информации.
void input (int i)
{
    cout << "Товар: ";
    cin >> invtry[i].item;
 
    cout << "Стоимость: ";
    cin >> invtry[i].cost;
 
    cout << "Розничная цена: ";
    cin >> invtry[i].retail;
 
    cout << "В наличии: ";
    cin >> invtry[i].on_hand;
 
    cout << "Время до пополнения запасов (в днях): ";
    cin >> invtry[i].lead_time;
}
 
// Модификация существующего элемента.
void update ()
{
    int i;
    char name [80];
 
    cout << "введите наименование товара: ";
    cin >> name;
 
    for(i = 0; i < SIZE; i++)
        if(!strcmp (name, invtry[i].item) ) break;
 
    if(i == SIZE)
    {
        cout << "Товар не найден.\n";
        return;
    }
    cout << "Введите новую информацию:\n";
    input(i);
}
 
// Отображаем на экране инвентарной ведомости.
void display ()
{
    int t;
 
    for(t = 0; t < SIZE; t++)
    {
        if(*invtry[t].item)
        {
            cout << invtry[t].item << '\n';
            cout << "Стоимость: $" << invtry[t].cost;
            cout << "\nВ розницу: $";
            cout << invtry[t].retail << '\n';
            cout << "В наличии: " << invtry[t].on_hand;
            cout << "\nДо пополнения осталось: ";
            cout << invtry[t].lead_time << " дней\n\n";
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2016, 21:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к массиву структур, почему именно так? (C++):

Обращение к массиву структур - C++
Структура объявлена в отдельной трансляции, там же объявлена функция заполнения двумерного массива структур, а по возвращении в main не...

Адресное обращение к массиву структур - C++
когда пробегаю по циклу, например, обращаюсь вот так: *(a+i).pole_1.pole_2 Так понел, что это неправильно. Как тогда, подскажите...

Почему функция работает именно так? - C++
Доброго времени суток! Помогите разобраться с кодом пожалуйста У меня есть фигурка которая крутится на экране. Есть функция которая...

Указатели. Почему именно так инициализируются в даном случае? - C++
Не могу понять, почему при инициализации *p мы берем по ссылке, а при *p2 просто присваивание? #include &lt;iostream&gt; using namespace std;...

Почему в С++ это сделано именно так? Объяснение для НЕ программиста - C++
В этой теме хотелось бы задавать &quot;тупые&quot; вопросы по С++ и получить ответы и объяснения на нормальном человеческом языке, понятном НЕ...

Символьные литералы, указатели и функция. Не могу понять, почему именно так - C++
Доброго времени суток всем! :) Изучаю С++, всегда стараюсь добить до последнего код, чтобы не было непоняток. Но сейчас наткнулся на...

1
zss
Модератор
Эксперт С++
6696 / 6258 / 2086
Регистрация: 18.12.2011
Сообщений: 16,340
Завершенные тесты: 1
21.07.2016, 21:28 #2
Цитата Сообщение от RamzezUA Посмотреть сообщение
*invtry[t].item = '\0';
Это то же самое, что и
C++
1
invtry[t].item[0] = 0;
Т.е. присвоение 1 элементу строки терминального нуля
(invtry[t].item - это адрес строки item, * - разыменование адреса, т.е. обращение к первому элементу массива)

Цитата Сообщение от RamzezUA Посмотреть сообщение
cin >> invtry[i].item;
Ввод слова в строку item
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2016, 21:28
Привет! Вот еще темы с ответами:

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю? - C++
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.

ошибка в обращение к массиву - C++
Можете подсказать почему у меня выдает ошибки на строках Mas=(i*z*y+j*z+k); и cout &lt;&lt;Mas&lt;&lt;&quot;/t&quot;; в коде, я же вроде бы не...

обращение к динамич массиву - C++
Задание:Дана целочисленная квадратная матрица. Определить сумму элементов в тех строках, которые не содержат отрицательных...

Обращение ко всему массиву в классах - C++
Всем привет. Есть класс: typedef unsigned int ui; class Location { private: std::string nameOfLocation; int...


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

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

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