Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите со Структурой 
:(
    Опции темы
tro9an
Дата 17.1.2011, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.1.2011

Репутация: нет
Всего: нет



Вот:
Код

#include <iostream>
using namespace std;
 
enum etype {laborer, secretary, manager, accountant, executive, researcher};
 
struct date
{
  int day;
  int mothey;
  int age;
  char slash;
};
 
struct employee
{
  int number;
  float posob;
  etype dol;
  date rab;
};
 
int main()
{
employee sot1, sot2, sot3;
int number_sot;
cout << "Сколько сотрудников надо ввести(минимальное число сотрудников-3)?"; cin >> number_sot;
if (number_sot < 3)
{cout << "Число сотрудников не может быть менше 3!"; return 1;} 
 
for (int j = 1; j < number_sot+1; j++)
{
cout << "Введите номер сотрудника: "; cin >> sot+'j'.number;
cout << "Введите велечину пособия сотрудника № " << sot+'j'.number << ": "; cin >> sot+'j'.posob;
cout << "Введите должность сотрудника № " << sot+'j'.number << ": "; cin >> sot+'j'.dol;
cout << "Введите дату принятия на работу сотрудника № " << sot+'j'.number << ": "; cin >> sot+'j'.date;
}
 
for (int j = 1; j < number_sot+1; j++)
{
cout << "Номер сотрудника: "; cin >> sot+'j'.number;
cout << "Велечина пособия сотрудника № " << sot+'j'.number << ": "; cin >> sot+'j'.posob;
cout << "Должность сотрудника № " << sot+'j'.number << ": "; cin >> sot+'j'.dol;
cout << "Дата принятия на работу сотрудника № " << sot+'j'.number << ": "; cin >> sot+'j'.date;
}
return 0;
}



Обратите внимания на цикл, а точнее на строку sot+'j'.number, и ей подобные.
Вообще можно так делать? А то как я только уже не пробывал, и j без кавычек, и j впереди ставил (соответственно менял имена переменных), ругается на это выражение, и всё тут!
Мне надо вводить от 3-ех сотрудников и больше, поетому если все запросы делать ручками, а не через цикл, то программа получится ну ооочень большой, а это не есть гуд!
Задание взял из книжки по С++, поетому на момент написания этой программы автор предполагает что кроме, (if else, for--while--do, switch case, struct, enum) я нечего не знаю!
Может можно как-то это по другому осуществить? Если можно просто отпишите что другой способ есть, не решайте за меня! И именно теми методами которые я написал выше! 


Это сообщение отредактировал(а) tro9an - 17.1.2011, 22:39
PM MAIL   Вверх
Teleport
Дата 18.1.2011, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



Замечание к коду:
Даже если бы код синтаксически был верен, то представь - у тебя 3 переменные типа employee а если пользователь программы введет количество сотрудников 5, то откуда в цикле взять еще две переменные типа employee?  smile Память нужно выделять под данные.

Потому для твоей задачи хоршее  решение - динамический массив структур - это если хочешь чтобы количество сотрудников варьировалось.
Приведу простой пример с использованием статического массива, приняв количество сотрудников = 3. 
В приведенном примере:
1) Считывается перечисляемый тип с использованием дополнительной переменной etmp, но можно и перегрузить потоковый оператор. 
2) Проверка ввода пользователем данных также отсутствует, чтобы показать только суть.

Код

#include <iostream>
using namespace std;

enum etype {laborer, secretary, manager, accountant, executive, researcher};

struct date
{
    int day;
    int mothey;
    int age;
    char slash;
};

struct employee
{
    int number;
    float posob;
    etype dol;
    date rab;
};

int main()
{
    //employee sot1, sot2, sot3; - это мы убираем
    //объявляем константу - количество сотрудников
    const int number_sot = 3;
    //объявляем массив структур типа employee из number_sot сотрудников
    employee sot[number_sot];
    //для перечисляемого типа данных
    int etmp;


/*
    int number_sot;
    cout << "Сколько сотрудников надо ввести(минимальное число сотрудников-3)?";
    cin >> number_sot;
    if (number_sot < 3)
    {
        cout << "Число сотрудников не может быть менше 3!";
        return 1;
    }
*/
    for (int j = 0; j < number_sot; j++) //нумерация элементов массива с нуля. Границы цикла [0, 3) т.е 0, 1, 2 - выполнится три раза
    {
        cout << "Введите номер сотрудника: ";
        cin >> sot[j].number;
        cout << "Введите велечину пособия сотрудника № " << sot[j].number << ": ";
        cin >> sot[j].posob;
        cout << "Введите должность сотрудника № " << sot[j].number << ": ";
        //cin >> sot[j].dol; - так не прокатит - это перечисляемый тип данных, его так не считать
        cin >> etmp;//вот теперь считаем число- номером должности;
        sot[j].dol = static_cast<etype>(etmp);
       //cout << "Введите дату принятия на работу сотрудника № " << sot[j].number << ": ";
       //как считать дату додумывай самостоятельно
    }

    //Смотрим вывод
    cout << "Третий элемент массива: Должность сотрудника " << sot[2].dol << " Номер сотрудника " << sot[2].number;
...
    return 0;
}



С использованием динамического массива будет чуть-чуть сложнее, но суть, на мой взгляд,  должна быть понятна по этому примеру. 

Это сообщение отредактировал(а) Teleport - 18.1.2011, 04:11


--------------------
user posted image
user posted image 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0866 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.