Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 13
1

Неправильная инициализация массивов

08.09.2019, 13:55. Показов 1267. Ответов 1
Метки нет (Все метки)

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
#include <iostream>
#include<time.h>
#include<windows.h>
#include<conio.h>
 
using namespace std;
 
#define NAME 15         // количество имен в массиве
#define POSTSIZE 7      // количество должностей в массиве
 
 
//константный массив имен
const char * names[NAME] = { "Саша", "Паша", "Даша", "Коля", "Оля",
                            "Юра", "Семен", "Артем", "Петя", "Лена",
                            "Марк", "Кирилл","Женя","Тимур", "Лиза" };
//константный массив должностей
const char* post[POSTSIZE] = { "Начальник отдела", "Системный админстратор", "Сотрудник IT отдела", "Продавец", "Консультант",
                            "Уброщик(ца)", "Практикант" };
 
//структура работника
struct workers
{
    char name[1][10];
 
    char post[1][20];
 
    char datestart[1][11];
 
    int age;
 
};
 
#pragma warning(disable:4996)
#pragma warning(disable:4244)
 
//прототипы функций
int RandomAge();
int getRandomNumberToName();
void InitRandName(workers* arr, int size);
void InitRandAge(workers* arr, int size);
int getRandomNumberToPost();
void InitRandPost(workers* arr, int size);
 
int main()
{
    system("chcp 1251 > nul");
 
    srand(time(NULL));
 
    int size;
    cout << "Введите кол-во работников: "; cin >> size;
    //иницализация динамического массива типа workers
    workers* worker = new workers[size];
    //иницализация поста
    InitRandPost(worker, size);
    //иницализация имени
    InitRandName(worker, size);
    //иницализация возраста 
    InitRandAge(worker, size);
    
 
 
 
    //цикл для вывода информации о сотруднике
    for (int i = 0; i < size; i++) {
        cout <<"Имя: "<< worker->name[i] <<" \tвозраст: "<< worker[i].age <<"\tдолжность: "<< worker->post[i] << endl;
    }
 
    cin.get(); cin.get();
    return 0;
}
 
//иницализация поста
void InitRandPost(workers* arr, int size) {
    for (int i = 0; i < size; i++) {
        strcpy(arr->post[i], post[getRandomNumberToPost()]);
    }
}
 
//иницализация возраста
void InitRandAge(workers* arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i].age = RandomAge();
    }
}
 
//иницализация имени
void InitRandName(workers* arr, int size) {
    for (int i = 0; i < size; i++) {
        strcpy(arr->name[i], names[getRandomNumberToName()]);
    }
}
//иницализация рандомного числа для определения поста
int getRandomNumberToPost()
{
    return rand() % POSTSIZE;
}
//иницализация рандомного числа для определения имени
int getRandomNumberToName()
{
    return rand() % NAME;
}
//иницализация рандомного числа для возраста
int RandomAge()
{
    return rand() % 62 + 18;
}
Задача состояла в том чтобы описать структуру работника и проиницализировать имя, должность, возраст итд. Проблема появляется при иницализации массивов должности и имени. При иницализации, по какой то причине, значение имени может поменяться с должностью и наоборот. Проходил по коду при помощи f11 но при этом причину ошибки не выявил.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2019, 13:55
Ответы с готовыми решениями:

Неправильная инициализация и обнуление массива
Есть большая программа, в ней необходимо постоянно переопределять массив. То есть, нужно его...

Инициализация двухмерных массивов
Доброго времени суток. Объясните, пожалуйста, почему так все работает нормально: int x =...

Конструктор и Деструктор (инициализация массивов)
Стал вопрос по инициализации массивов (внутри класса) в конструкторе, но ни методичка, ни гугль...

Быстрая инициализация многомерных массивов
Доброго времени суток. Работаю на QT Creator в связке с MinGW 32 Проблемы в общем то и нет,...

1
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
08.09.2019, 18:03 2
Лучший ответ Сообщение было отмечено Egor_S как решение

Решение

Цитата Сообщение от Egor_S Посмотреть сообщение
strcpy(arr->name[i], names[getRandomNumberToName()]);
нормально? с постом так же
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2019, 18:03

Инициализация строковых массивов в конструкторе
Здравствуйте уважаемые гуру. Задачка: Нужно инициализировать массив char'ов (и пару int'ов) в...

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

Инициализация массивов и их передача в функции для обработки
Видел темы работы с массивами чисел. Там вопросов вроде нет. Тут хотел бы немного уточнений на...

Неправильная инициализация переменных
Добрый день! Пишу на Microsoft Visual C++ 6.0 Возник вопрос. При инициализации переменных...

Ввести 2 строки и вывести(неправильная запись массивов)
Я удалил из кода все лишние макросы, чтобы выделить ту часть, где возникают проблемы. Я пытаюсь...

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


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

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

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