
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.5] |
![]() |
|
Страницы: (117) « Первая ... 20 21 [22] 23 24 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#316
,
|
|
|
Цитата trainer @ ![]() ![]() cout<<'Вы выбрали "<<(i<4?"овощи!":"фрукты!") остальное переписывать надо или и так понятно? ![]() ![]() cout<<'Вы выбрали "<<(i<5?"овощи!":"фрукты!") =) Не совсем понял смысл данного условия... Почему без break? |
![]() |
Сообщ.
#317
,
|
|
Цитата lava @ Не совсем понял смысл данного условия... Почему без break? А почему Flex меня заставил ломать голову над тем, как реализовать template? Плюс ко всему он использовал стороннюю библиотеку! |
Сообщ.
#318
,
|
|
|
![]() ![]() cin >> i; if ( i < 0 || i > 9 ) { cout << "Wrong number" << endl; return; } cout << "Вы выбрали " << (i < 5 ? "овощи!" : "фрукты!") << endl; или даже ![]() ![]() do { cout << "Enter correct number: "; cin >> i; } while ( i < 0 || i > 9 ) cout << "Вы выбрали " << (i < 5 ? "овощи!" : "фрукты!") << endl; |
![]() |
Сообщ.
#319
,
|
|
А если я введу букву?
|
Сообщ.
#320
,
|
|
|
Вылетит =)
Равно как и твой код. |
![]() |
Сообщ.
#321
,
|
|
Цитата lava @ Равно как и твой код. Уверен? ![]() |
Сообщ.
#322
,
|
|
|
Это уже либо исключения подключать надо, либо читать строку и анализировать.
Добавлено Цитата Profi @ Уверен? Блин. Не дочитал - твой не вылетит. Ну, тогда и мне надо уже исключения ловить, а мне сейчас лень =)) |
![]() |
Сообщ.
#323
,
|
|
Ну, так кто-нибудь полный код даст?
|
Сообщ.
#324
,
|
|
|
![]() ![]() #include <iostream> struct PlodException {}; struct PlodDefinition { char Name[16]; unsigned Type; }; const int PlodsNumber = 9; const PlodDefinition Plods[] = { {"Морковь", 0}, {"Картофель", 0}, {"Томаты", 0}, {"Огурцы", 0}, {"Капуста", 0}, {"Яблоки", 1}, {"Персики", 1}, {"Виноград", 1}, {"Абрикосы", 1}, {"Арбуз", 1}}; const char* PlodTypes[] = {"овощ", "фрукт"}; class Plod { int Number; public: Plod() : Number(-1) { } Plod(int aNumber) : Number(aNumber) { } Plod(const Plod& p) : Number(p.Number) { } Plod& operator=(const Plod& p) { Number = p.Number; return *this; } void IsValid() const { if(n < 0 && n > PlodsNumber) throw PlodException(); } const char* GetName() const { IsValid(); return Plods[Number].Name; } const char* GetType() const { IsValid(); return PlodTypes[Plods[Number].Type]; } }; std::istream& operator>>(std::istream& is, Plod& pl) { try { int n; is >> n; if(n < 0 && n > PlodsNumber) throw PlodException(); pl = Plod(n); } catch (...) { throw PlodException(); } } int main() { Plod p; char c; try { std::cin >> p; } catch(PlodException& err) { std::cerr << "Введите верный плод"; std::cin >> c; return 1; } std::cout << p.GetType() << "(" << p.GetName() << ")\n"; std::cin >> c; return 0; } Выглядит конечно немного извращенно, но определенную свободу дает ![]() ![]() |
![]() |
Сообщ.
#325
,
|
|
У тебя 57 строк (пустые не считал) у меня 31, плюс все проще и нагляднее. Прогноз работает!
|
Сообщ.
#326
,
|
|
|
Profi, зато я могу для каждого плода краткого описания каждого плода, добавить еще овощей и фруктов, и даже ягод, и при этом использовать очень мало изменений, а тебе придется переписывать значительную часть кода
![]() Добавлено Profi, то есть я за счет 20 дополнительных строк (хотя если бы я правильно форматировал код, их было бы гораздо больше ![]() ![]() |
Сообщ.
#327
,
|
|
|
так надо было c case без break, а тут ни первого ни второго
![]() |
![]() |
Сообщ.
#328
,
|
|
Цитата Мяут @ Profi, зато я могу для каждого плода краткого описания каждого плода, добавить еще овощей и фруктов, и даже ягод, и при этом использовать очень мало изменений, а тебе придется переписывать значительную часть кода ![]() Ну, я тоже мог все на классах написать. А как такой код: ![]() ![]() program Project1; {$APPTYPE CONSOLE} uses Variants,ComObj,ActiveX; Var v:variant; begin CoInitialize(nil); v:=CreateOleObject('Word.Application'); v.visible:=true; readLn; v.quit; end. |
Сообщ.
#329
,
|
|
|
Alex Forth, если я могу лучше, нафига мне case/break? Я могу пользоваться всеми доступными средствами языка.
Profi, давай не будем давать платформо-зависимые примеры, а? Цитата Profi @ Ну, я тоже мог все на классах написать. тут дело не только в одних классах. Один массив структурок информации о плодах чего стоит ![]() |
Сообщ.
#330
,
|
|
|
Цитата linuxfan @ P.P.P.S.: в дельфях, по крайней мере, вложенные функции обеспечивают подобие заглушек, а в плюсах с этим совсем туго. В плюсах это реализовать вполне можно. Даже достаточно просто. Пока слабо ![]() ![]() Цитата Profi @ Ну, так кто-нибудь полный код даст? Почему бы и нет (приведена калька, не использующая никакие полезные фичи c++)? ![]() ![]() const char *pr[]={"Морковь", "Картофель", "Помидоры", "Огурцы", "Капуста", "Яблоки", "Груши", "Сливы", "Персики", "Абрикосы"}; int main() { int i; bool v = false; while (!v) { cout << "Выберите продукт:"<<endl; for (int i = 0; i < 10; ++i) cout << i << '. ' << pr[i]; try { int n; if (!(cin >> n)) throw runtime_error("Надо ввести число"); v = true; if (i >= 0 && i <= 4) cout << "Вы выбрали овощи!"; else if (i >= 5 && i <= 9) cout << "Вы выбрали фрукты!"; else { cout << "Введенное число не входит в список"; v = false; } } catch (...) { cout << "Вы ввели не число"; } } return 0; } |