Здравствуйте!
Такой вопрос. Имеется
enum E {A=121, B=167};
struct S{
E e;
string s;
};
S temp;
Как считать со стандартного входного потока данные в temp.
cin >> temp.s;
удачно, а
cin >> temp.e;
нет.
Так как же зачитать в поле структуры типа E?
Здравствуйте, Аноним, Вы писали:
А>Как считать со стандартного входного потока данные в temp.
А>удачно, а
А>А>cin >> temp.e;
А>
А>нет.
А>Так как же зачитать в поле структуры типа E?
cin >> temp.e;
temp.e -= '0';
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте!
А>Такой вопрос. Имеется
А>А>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 >> для своего перечисления.
Здравствуйте, Аноним, Вы писали:
<>
Два вопроса:
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;
}