зачитать enum
От: Аноним  
Дата: 11.10.05 15:41
Оценка:
Здравствуйте!

Такой вопрос. Имеется
enum E {A=121, B=167};
struct S{
E e;
string s;
};

S temp;


Как считать со стандартного входного потока данные в temp.
cin >> temp.s;

удачно, а
cin >> temp.e;

нет.

Так как же зачитать в поле структуры типа E?
Re: зачитать enum
От: Vadim VuDZ Россия  
Дата: 11.10.05 15:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как считать со стандартного входного потока данные в temp.

А>удачно, а
А>
А>cin >> temp.e;
А>

А>нет.

А>Так как же зачитать в поле структуры типа E?


cin >> temp.e;
temp.e -= '0';
Re: зачитать enum
От: Bell Россия  
Дата: 11.10.05 15:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте!


А>Такой вопрос. Имеется

А>
А>enum E {A=121, B=167};
А>struct S{
А>E e;
А>string s;
А>};

А>S temp;
А>


А>Как считать со стандартного входного потока данные в temp.

А>
А>cin >> temp.s;
А>

А>удачно, а
А>
А>cin >> temp.e;
А>

А>нет.

А>Так как же зачитать в поле структуры типа E?


1.
int etmp = 0;
cin >> etmp;
temp.e = static_cast<E>(etmp);


2.
Перегрузить operator >> для своего перечисления.
Любите книгу — источник знаний (с) М.Горький
Re: зачитать enum
От: Кодт Россия  
Дата: 11.10.05 15:51
Оценка:
Здравствуйте, Аноним, Вы писали:

<>
Два вопроса:
1) В каком виде должны быть представлены данные на входе?
— числовые значения
— некие идентификаторы
— и так, и этак
2) Что делать, если числовое значение не соответствует ни одному из заявленных значений?

В принципе, если на входе числа, то можно читать так:
int tmp;
cin >> tmp;
if(is_valid_E(tmp))
  temp.e = (E)tmp;

И даже можно перегрузить оператор ввода
inline std::istream& operator>>(std::istream& istr, E& var)
{
  int tmp;
  istr >> tmp;
  if(is_valid_E(tmp))
    var = tmp;
  else
    istr.setstate(std::ios::failbit);
  return istr;
}
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.