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

Ввод/вывод данных элементов структуры через функцию

28.12.2013, 19:11. Показов 10665. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разработать программу учета покупок ювелирного магазина. Данные о покупках хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по стоимости ювелирного украшения.
(в программе использовать структуры; все логически законченные части программы оформить в виде отдельных функций)

Не понимаю, как осуществить ввод/вывод данных элементов структуры через функцию...
Помогите пожалуйста!!!


C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <conio.h>
 
 
struct YuShop{
char Name[10];// назвоние изделия
float Cena;// цена
char Prod[10];// продавец
char Pokup[10];// покупатель
int Data[3];//дата продажи
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2013, 19:11
Ответы с готовыми решениями:

Ввод и вывод массива через функцию
Здраствуйте, написал программу для ввода/вывода массива с заданным количеством елементов, но не...

Ввод и вывод структуры
Всем привет! Подскажите пожалуйста как правильно осуществить ввод и вывод структуры? Вот, что я...

Реализовать ввод и вывод полей структуры
Здравствуйте ещё раз. Тут во второй лабе не могу понять как реализовать ввод и вывод полей...

Ввод/вывод структуры: найти и исправить ошибки в коде
Прога не запускатся, что-то не так с scanf. Не могу найти ошибку. #include &lt;conio.h&gt; #include...

9
32 / 32 / 20
Регистрация: 11.06.2013
Сообщений: 124
28.12.2013, 19:43 2
Оглашение структуры такое:
C
1
2
3
4
5
6
7
8
9
10
11
const int n = 10;
int size = 0;
typedef struct YuShop{
        char name[n];
        float cena;
        char prod[n];
        char pokup[n];
        int data;
        }SHOP;
 
SHOP sh[100]; // Îãëàøåíèå ìàñèâà ñòðóêòóð
Ф-ю на ввод, допустим, назовем input. Тогда она будет выглядеть так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void input(int size) {
    for(int i = 0; i < size; i++) {
        do {
            printf("¹ %d Íàçâàíèå òîâàðà: ", i + 1);
            scanf("%s", &sh[i].name);
        }while(!strcmp(add[i].name, ""));
        printf("\n Öåíà: ");
        scanf("%f", &sh[i].cena);
        do {
            printf("\n Ïðîäàâåö: ");
            scanf("%s", &sh[i].prod);
        }while(!strcmp(add[i].prod, ""));
        do {
            printf("\n Ïîêóïàòåëü: ");
            scanf("%s", &sh[i].pokup);
        }while(!strcmp(add[i].pokup, ""));
        printf("\n Äàòà: ");
        scanf("%d", &sh[i].date);
    }
}
Но будет она работать в том случае, если в main будет записано:
C
1
2
3
    printf("Ñêîëüêî àäðåñîâ áóäåò â ñòðóêòóðå? ");
scanf("%d", &size);
input(size);
Добавлено через 10 минут
На вывод от такая ф-я будет:
C
1
2
3
4
5
6
void show(int size){
    for(int i = 0; i < size; i++) {
        printf("%s               %f                      %s                %s                %d\n", 
                 sh[i].name,    sh[i].cena,           sh[i].prod,      sh[i].pokup,    sh[i].date);
    }
}
Можно еще оформить красивой таблицей, но это уже как хотите)))
1
0 / 0 / 1
Регистрация: 04.11.2013
Сообщений: 54
29.12.2013, 16:22  [ТС] 3
А что обозначает эта запись:
while(!strcmp(add[i].name, ""));
0
32 / 32 / 20
Регистрация: 11.06.2013
Сообщений: 124
29.12.2013, 16:38 4
Цитата Сообщение от anshelika Посмотреть сообщение
А что обозначает эта запись:
while(!strcmp(add[i].name, ""));
Это цикл do while:
C
1
2
3
4
do {
       printf("№ %d Название товара: ", i + 1);
       scanf("%s", &sh[i].name);
}while(!strcmp(add[i].name, ""));
В котором условие пропуска есть (!strcmp(add[i].name, "")). То есть программа будет запрашивать название товара до тех пор, покуда строчка не будет заполнена. Грубо говоря, это проверка на отсутствие пустоты в строке.

П.С.strcmp - сравнивает 2 строчки, в нашем случае это поле с именем (add[i].name) и пустота ("").
И ! выполняет свою функцию НЕ.
В итоге, если дословно: выполнять цикл до тех пор, по куда строчки [I]add.name и "" не будут отличатся.Но по скольку "" - пустота. То выполнять до тех пор, пока [I]add.nam не пустота.
1
0 / 0 / 1
Регистрация: 04.11.2013
Сообщений: 54
29.12.2013, 16:45  [ТС] 5
идентификатор add не определен.(((
0
32 / 32 / 20
Регистрация: 11.06.2013
Сообщений: 124
29.12.2013, 16:52 6
Цитата Сообщение от anshelika Посмотреть сообщение
А что обозначает эта запись:
while(!strcmp(add[i].name, ""));
Ой, вместо add надо sh. Конечно)))
0
0 / 0 / 1
Регистрация: 04.11.2013
Сообщений: 54
29.12.2013, 18:47  [ТС] 7
в итоге получилась программа:
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
#include <iostream>
#include <stdio.h>
 
const int n = 10;
int size = 0;
typedef struct YuShop{
        char name[n];// наименование изделия
        float cena;// цена
        char prod[n];// продавец
        char pokup[n];// покупатель
        int data;// дата покупки
        }SHOP;
 
SHOP sh[100]; // Оглашение масива структур
 
void input(int size) {
    for(int i = 0; i < size; i++) {
        do {
            printf("№ %d Nazvanie tovara: ", i + 1);
            scanf("%s", &sh[i].name);
        }while(!strcmp(sh[i].name, ""));// выполняется  пока строчка не пуста
        printf("\n Cena: ");
        scanf("%f", &sh[i].cena);
        do {
            printf("\n  Prodavec: ");
            scanf("%s", &sh[i].prod);
        }while(!strcmp(sh[i].prod, ""));
        do {
            printf("\n Pokupatel: ");
            scanf("%s", &sh[i].pokup);
        }while(!strcmp(sh[i].pokup, ""));
        printf("\n Data: ");
        scanf("%d", &sh[i].data);
    }
}
 
void show(int size){
    for(int i = 0; i < size; i++) {
        printf("%s | %f | %s | %s |%d\n", 
            sh[i].name, sh[i].cena, sh[i].prod, sh[i].pokup, sh[i].data);}
}
 
void main (void)
{   printf("Skolko adresov budet v strukture? ");
scanf("%d", &size);
input(size);
}
Но при выполнении, не все поля заполняются=( в чем причина?

Добавлено через 37 минут
не, с предыдущим вроде как разобралась... с сортировкой по цене пока еще нет=(
0
32 / 32 / 20
Регистрация: 11.06.2013
Сообщений: 124
29.12.2013, 23:33 8
Цитата Сообщение от anshelika Посмотреть сообщение
с сортировкой по цене пока еще нет=(
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void sortByPrice(int size) {
    double tmp;
    int i, j, pos;
    for(i = 0; i < size; ++i) 
    { 
        pos = i; 
        tmp = sh[i].cena;
        for(j = i + 1; j < size; ++j)
        {
            if (sh[j].cena < tmp) 
            {
               pos = j; 
               tmp = sh[j].cena; 
            }
        }
        sh[pos].cena = sh[i].cena; 
        sh[i].cena = tmp; 
    }      
}
Добавлено через 38 минут
Я там немного ошибок наделал)) Не учел что дата - массив, та и с ценой(дабл, флоат) проблемы были)) Вот короче готовый нормальный код:
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
#include <iostream>
#include <stdio.h>
 
const int n = 10;
int size = 0;
typedef struct YuShop{
        char name[n];// наименование изделия
        double cena;// цена
        char prod[n];// продавец
        char pokup[n];// покупатель
        int data[3];// дата покупки
        }SHOP;
 
SHOP sh[100]; // Оглашение масива структур
 
void input(int size) {
    for(int i = 0; i < size; i++) {
        do {
            printf("\n№%d Nazvanie tovara: ", i + 1);
            scanf("%s", &sh[i].name);
        }while(!strcmp(sh[i].name, ""));// выполняется  пока строчка не пуста
        printf("\nCena: ");
        scanf("%lf", &sh[i].cena);
        do {
            printf("\nProdavec: ");
            scanf("%s", &sh[i].prod);
        }while(!strcmp(sh[i].prod, ""));
        do {
            printf("\nPokupatel: ");
            scanf("%s", &sh[i].pokup);
        }while(!strcmp(sh[i].pokup, ""));
        printf("\nDen\' prodagu: ");
        scanf("%d", &sh[i].data[0]);
        printf("\nMуsac prodagu: ");
        scanf("%d", &sh[i].data[1]);
        printf("\nGod prodagu: ");
        scanf("%d", &sh[i].data[2]);   
    }
}
 
void show(int size){
    printf("+---------------+--------+---------------+---------------+----------+\n");
    printf("+-----Tovar-----+--Cena--+---Prodavec----+---Pokupatel---+---Data---+\n");
    printf("+               +        +               +               +          +\n");
    for(int i = 0; i < size; i++) {
    printf("+%-15s|%-8.2lf|%-15s|%-15s|%-2d.%-2d.%-2d  +\n", 
            sh[i].name, sh[i].cena, sh[i].prod, sh[i].pokup, sh[i].data[0], sh[i].data[1], sh[i].data[2]);}
    printf("+---------------+--------+---------------+---------------+----------+\n");
    }
 
void sortByPrice(int size) { //Сортировка методом выбора
    double tmp;
    int i, j, pos;
    for(i = 0; i < size; ++i) 
    { 
        pos = i; 
        tmp = sh[i].cena;
        for(j = i + 1; j < size; ++j) 
        {
            if (sh[j].cena < tmp) 
            {
               pos = j; 
               tmp = sh[j].cena; 
            }
        }
        sh[pos].cena = sh[i].cena; 
        sh[i].cena = tmp; 
    }      
}  
 
int main (void){
printf("Skolko adresov budet v strukture? ");
scanf("%d", &size);
input(size);
show(size);
sortByPrice(size);
printf("\n\n Posle sortirovki:\n");
show(size);
 
getchar ();
getchar ();
return 0;
}
Если хотите, организуйте там проверку по датам (месяц <=12, день <=31, год <=99 (потому что формат года ** а не ****))..)
1
0 / 0 / 1
Регистрация: 04.11.2013
Сообщений: 54
03.01.2014, 19:52  [ТС] 9
А как модифицировать эту программу, чтобы данные могли сохраняться в файле и считываться из него???
0
0 / 0 / 1
Регистрация: 27.10.2016
Сообщений: 10
05.11.2016, 19:04 10
Tonzik, Код при вставке в компилятор не работает. Выдаёт ошибку. Может кто помочь с данной задачей?
0
05.11.2016, 19:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2016, 19:04
Помогаю со студенческими работами здесь

Простейшая программа для начинающих, ввод и вывод комплексных чисел, структуры
Нужно ввести и вывести комплексные числа С языком си только начинаю знакомиться Где какие ошибки?...

Заполнение структуры через функцию
#include &lt;stdio.h&gt; #include &lt;string.h&gt; char ch; int i,j; struct loc { char *name; ...

Ввод значений через функцию
плиз, можете объяснить как сделать корректный ввод значений, а то происходит затирание в main ...

Ввод матрицы через функцию
Подскажите, что здесь не так? После ввода первого элемента второй строки приложение вылетает. ...


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

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

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