Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Перечисление


Автор: agentjamesbolt007 14.9.2012, 14:33
Задача. Программа должна поп первой введенной букве должности определять соответствующее значение переменной , поместить это значение в переменную типа etype, а затем вывести полное название должности на экран.

Первую часть я сделал, но непойму как выводить на экран название должности из переменной , ведь у перечислений есть недостаток с стандартным вводом/выводом(выводятся целые значения переменной 0, 1,2 и т.д.)

Наверное для вывода нужно создать еще одно ветвление switch но не пойму
как на экране выводить название 

Код

#include <iostream>
using namespace std;
//объявление перечисляемого типа
enum etype {laborer, secretary, manager, accountant, executive, researcher};
int main()
{
  char letter;
  
  etype l, s, m, a, e, r; //определения переменных хранящих должности
  cout <<"Vvedite pervuyu bukvu dolgnosti (laborer, secretary, manager, accountant,"
  <<"executive, researcher)";
  cin >>letter;
  switch(letter)
  {
    case'l': l =laborer; break;     //инициализация переменных
    case's': s =secretary; break;
    case'm': m =manager; break;
    case'a': a =accountant; break;
    case'e': e =executive; break;
    case'r': r =researcher; break;
  }
  
  //cout <<"Polnoe nazvanie dolgnosti:" 

}

Автор: bsa 14.9.2012, 15:13
agentjamesbolt007, шаблонами и переопределением функций пользоваться можно? Если нет, то тогда просто делай еще один свитч на вывод.

Автор: feodorv 14.9.2012, 23:28
Цитата(bsa @  14.9.2012,  16:13 Найти цитируемый пост)
делай еще один свитч 

А нельзя так:
Код

#include <iostream>
using namespace std;

//объявление перечисляемого типа
enum etype {laborer, secretary, manager, accountant, executive, researcher,typelast};
const char *names[typelast] = { "laborer", "secretary", "manager", "accountant", "executive", "researcher" };

int main()
{
  char letter;
  etype type = typelast; //определения переменных хранящих должности

  do
  {
    cout <<"Vvedite pervuyu bukvu dolgnosti (laborer, secretary, manager, accountant,"
    <<"executive, researcher)";
    cin >>letter;

    switch(letter)
    {
      case 'l': type = laborer; break;
      case 's': type =secretary; break;
      case 'm': type = manager; break;
      case 'a': type = accountant; break;
      case 'e': type = executive; break;
      case 'r': type =researcher; break;
    }
  } while( type == typelast );
  
  cout << "Polnoe nazvanie dolgnosti: " << names[type];
}

Автор: agentjamesbolt007 17.9.2012, 07:40
feodorv так нельзя, т.к. указатели еще не проходил и пользоваться ими нельзя
Цитата(bsa @  14.9.2012,  15:13 Найти цитируемый пост)
шаблонами и переопределением функций пользоваться можно? Если нет, то тогда просто делай еще один свитч на вывод.

функциями тоже нельзя, а точто свитч на выход это я знаю(в начале писал), но как его запихать непойму.

Автор: Dem_max 17.9.2012, 08:52
Сделай так  smile 
Код

    switch(letter)
    {
      case 'l': type = laborer; break;
      case 'a': type = accountant; break;
      case 'm': type = manager; break;
      case 'e': type = executive; break;
      case 'r': type =researcher; break;
      case 's': type =secretary; break;  
    }
    

Автор: agentjamesbolt007 17.9.2012, 13:26


Цитата(Dem_max @  17.9.2012,  08:52 Найти цитируемый пост)
Сделай так   
код C++
    switch(letter)
    {
      case 'l': type = laborer; break;
      case 'a': type = accountant; break;
      case 'm': type = manager; break;
      case 'e': type = executive; break;
      case 'r': type =researcher; break;
      case 's': type =secretary; break;  
    }


а в чем разница? попробовал я так, все равно результат показывает число 

Автор: agentjamesbolt007 17.9.2012, 15:12
ни у кого мыслей по этому поводу нет? что неужели такая сложная задача?

Автор: math64 17.9.2012, 15:14
Видел смайлик? А теперь прочитай только первые буквы вариантов.

Добавлено через 2 минуты и 59 секунд
А ответ собственно по теме - разворачивай case в обратном направлении, раз массивами пользоваться нельзя. Хотя строка - уже массив, а cout - целый класс.
Код

swicth(type) {
case laborer: cout << "laborer" << endl; break;
...
}

Автор: feodorv 17.9.2012, 15:21
Цитата(agentjamesbolt007 @  17.9.2012,  16:12 Найти цитируемый пост)
ни у кого мыслей по этому поводу нет? что неужели такая сложная задача? 

Ну, была надежда, что Вы сами что-нибудь придумаете, направление мысли Вам задали smile 


Цитата(bsa @  14.9.2012,  16:13 Найти цитируемый пост)
тогда просто делай еще один свитч на вывод. 

Код

switch( type )
{
  case laborer:
    cout << "laborer" << endl;
    break;
  ...
}

Автор: agentjamesbolt007 19.9.2012, 08:48
Всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)