Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 15.04.2016
Сообщений: 39
1

Работа с массивом структур

19.03.2019, 17:37. Показов 1515. Ответов 4

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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
 
#define N 6
 
main()
{
    setlocale(LC_ALL, "rus");
    int i,
        sluzh = 0,
        workers = 0,
        kolh = 0;
    int kolsluzh, kolworkers, kolkolh;
 
    struct sberkassa
    {
        char lastname[20],
            district[30],
            polozhenie[20];
        int  vklad;
    }s;
 
    struct sberkassa spisok[N];
    printf("\n Введите информацию о вкладчиках сберкассы\n");
    for (i = 0; i < N; i++)
    {
        printf("\n %d", i + 1);
        printf("\n\t Фамииля: ");
        scanf_s("%s", &s.lastname);
        printf("\n\t Район: ");
        scanf_s("%s", &s.district);
        printf("\n\t Социальное положение: ");
        scanf_s("%s", &s.polozhenie);
        printf("\n\t Сумма вклада: ");
        scanf_s("%d", &s.vklad);
        spisok[i] = s;
    }
    
    for (i = 0; i < N; i++)
    {
        if (strcmp(spisok[i].polozhenie,"служащий") == 0)
            kolsluzh=sluzh++;
        if (strcmp(spisok[i].polozhenie, "рабочий") == 0)
            kolworkers=workers++;
        if (strcmp(spisok[i].polozhenie, "колхозник") == 0)
            kolkolh=kolh++;
    }
    printf(" Количество служащих: %d\n Количество рабочих: %d\n Количество колхозников: %d", &kolsluzh, &kolworkers, &kolkolh);
    _getch();
    return 0;
}
Пробовал по другому, тоже не получается
C
1
2
3
4
5
6
7
8
9
...
char state[20];
...
if (strcmp(spisok[i].polozhenie,state) == 0)
            kolsluzh=sluzh++;
        if (strcmp(spisok[i].polozhenie, state) == 0)
            kolworkers=workers++;
        if (strcmp(spisok[i].polozhenie, state) == 0)
            kolkolh=kolh++;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2019, 17:37
Ответы с готовыми решениями:

Программа с массивом структур и сравнением
Доброе утро! Помогите пожалуйста написать код. Для экзамена нужен очень. Задача: Вася знает...

Пояснить листинг программы с динамическим массивом структур (и создание файлов)
/*Sozdaite fail katalog knig. Naidite spetsialinosti p k-roi imeetsea naibolishee 4islo knig.*/ ...

Заданы комплексные числа, представленные в программе массивом array[] структур
Используя указатели над структурами решить задачу: заданы комплексные числа, представленные в...

Функции работаты с массивом структур или с отдельной структурой через указатели
Всем доброго времени суток. Я вот переписал код, но прога не работает. Не пойму почему. Помогите,...

4
1 / 1 / 0
Регистрация: 15.04.2016
Сообщений: 39
19.03.2019, 17:43  [ТС] 2
Вот как "работает" программа.
Миниатюры
Работа с массивом структур  
0
6 / 5 / 1
Регистрация: 05.10.2018
Сообщений: 21
19.03.2019, 21:28 3
Так, первое
C
1
kolsluzh=sluzh++;
Зачем? Не проще
C
1
kolsluzh++;
Ну, а второе это вообще
& это операция взятия адреса и не надо тут его брать.
C
1
printf(" Количество служащих: %d\n Количество рабочих: %d\n Количество колхозников: %d", &kolsluzh, &kolworkers, &kolkolh);
И т.к. kolworkers и прочие у вас не инициализированы и при это в strcmp не возвращает вам 0, то там мусор храниться в них.
Вот будет работать если сравнивать с англ.
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
 
#define N 2
 
main()
{
    setlocale(LC_ALL, "rus");
    int i,
        sluzh = 0,
        workers = 0,
        kolh = 0;
 
 
    struct sberkassa
    {
        char lastname[20],
            district[30],
            polozhenie[20];
        int  vklad;
    }s;
 
    struct sberkassa spisok[N];
    printf("\n Введите информацию о вкладчиках сберкассы\n");
    for (i = 0; i < N; i++)
    {
        printf("\n %d", i + 1);
        printf("\n\t Фамииля: ");
        scanf_s("%s", &s.lastname);
        printf("\n\t Район: ");
        scanf_s("%s", &s.district);
        printf("\n\t Социальное положение: ");
        scanf_s("%s", &s.polozhenie);
        printf("\n\t Сумма вклада: ");
        scanf_s("%d", &s.vklad);
        spisok[i] = s;
    }
 
    for (i = 0; i < N; i++)
    {
        if ((strcmp(spisok[i].polozhenie,"superman")) == 0)
            sluzh++;
        if ((strcmp(spisok[i].polozhenie, "worker")) == 0)
            workers++;
        if ((strcmp(spisok[i].polozhenie, "farmer")) == 0)
            kolh++;
    }
    printf(" *****TEST: %s******", spisok[0].polozhenie);
    printf(" Количество служащих: %d\n Количество рабочих: %d\n Количество колхозников: %d", sluzh, workers, kolh);
    _getch();
    return 0;
}
Поняли в чём камушки?
ЗЫ: и обратите внимание на
C
1
printf(" *****TEST: %s******", spisok[0].polozhenie);
введите сначала русскими, а потом англ. и поглядите что будет выведено в обоих случаях.
1
1 / 1 / 0
Регистрация: 15.04.2016
Сообщений: 39
20.03.2019, 16:36  [ТС] 4
C
1
2
3
4
5
6
7
8
9
10
11
12
for (i = 0; i < N; i++)
    {
        if (strcmp(spisok[i].polozhenie, "superman") == 0)
            sluzh++;
        if (strcmp(spisok[i].polozhenie, "workers") == 0)
            workers++;
        if (strcmp(spisok[i].polozhenie, "farmer") == 0)
            kolh++;
    }
    printf(" Количество %s: %d", spisok[0].polozhenie,sluzh);
    printf(" Количество %s: %d", spisok[1].polozhenie, workers);
    printf(" Количество %s: %d", spisok[2].polozhenie, kolh);
По идее работает, но только если писать на английском. Когда пишу на русском даже не считает. На русском как то можно сделать?
Есть такой вопрос, а можно как то сделать, чтобы считались те строки, которые пользователь сам введет? Вместо тех которые по условию даны.
Допустим каких нибудь менеджеров, врачей?)
0
6 / 5 / 1
Регистрация: 05.10.2018
Сообщений: 21
20.03.2019, 20:44 5
Цитата Сообщение от Cry_pton Посмотреть сообщение
По идее работает, но только если писать на английском. Когда пишу на русском даже не считает. На русском как то можно сделать?
Можно много чего, но это будет похоже наверное на вызов шумерских демонов. Консоль не совсем в ладах с кириллицой.
Надо установить в самой консоли кодировку, потом указать в программе эту кодировку, кодировку файла и может еще чего-нибудь.

Цитата Сообщение от Cry_pton Посмотреть сообщение
Есть такой вопрос, а можно как то сделать, чтобы считались те строки, которые пользователь сам введет? Вместо тех которые по условию даны.
Допустим каких нибудь менеджеров, врачей?)
Конечно можно.
Т.к. мы заранее не знаем количество введённых должностей, то это будет динамический массив, да не простой, а char **
Хотя можно конечно и без динамического обойтись. Сделать статику на 500 записей, врятли перевалит, хотя может.
1
20.03.2019, 20:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2019, 20:44
Помогаю со студенческими работами здесь

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

Работа с массивом структур
Необходимо создать массив записей (структур) с определенными полями (марка автомобиля, рег. номер,...

Работа с массивом структур
Есть структура: struct student { char fam; }; Объявлена: int N = 3; student *stud; stud =...

Работа с массивом структур
Помогите кто может изладить такую вот штуку на С /чистый Си/ А может готовое уже есть, оч...

Работа с массивом структур
Всем привет!!! Пожаалусто помогите кому нетрудно))) Программирование задач с использованием...

Неправильная работа с массивом структур
Помогите, пожалуйста: программа заключается в следующем: спроектировать структуру car, которая...


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

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