Тема: Вопрос по C++ Builder 6

Ответить в теме
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 21 по 40 из 60
  1. Вверх #21
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Меня затронула эта проблема и я решил разобраться. Написал код, который работает так, как ты ожидал. Ну почти. Теперь он хитрый стал и не отстанет от пользователя, пока тот не введет то, что надо
    Код:
    // sqrt.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    bool Continue (const char *theThingWeAreDoing)
    {
      char DoneCharacter;
      cout << endl << theThingWeAreDoing << " - Nazhmite \"n\" i \"Enter\" dlya vihoda ili druguyu klavishu dlya povtora: ";
      cin >> DoneCharacter;
    
      return (DoneCharacter != 'n');
    }
    
    int NumError(void)
    {
      cerr << "Vozmozhno vi vveli ne chislo!" << endl;
      cin.clear();
      char BadInput[5];
      cin >> BadInput;
      return 1;
    }
    //Моя новая функция для хитрого ввода
    double Input(const char *s)
    {
      double r;
      cout << s;
      while(!(cin >> r)){
    	  //Вводящий что то напартачил. Ругнём его
        cout << "Eto ne chislo. Poprobujte eshche!" << endl;
    	//Очистим буфер
    	cin.clear();
    	//Проигнорируем все символы до конца строки, но не больше 80
    	cin.ignore(80, '\n');
    	//и на второй круг
     };
      return r;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    do{
      try{
    	  cout << "Vvedite argumenty a, b, c uravneniya vida \"ax^2 + bx + c = 0\" v sootvetstvii s ih znakami. a ne dolzhno byt' ravno 0." << endl;
    	double a = Input("a: ");
        if(a == 0){
          cout << "a ne dolzhno byt' ravno 0!" << endl;
        }else{
    		double b = Input("b: ");
    		double c = Input("c: ");
            double D = (b*b)-(4*a*c);
            if(D < 0){
              cout << "Diskriminant menshe 0!" << endl;
            }else{
              double x1 = (-(b)-sqrt(D))/(a*2);
              double x2 = (-(b)+sqrt(D))/(a*2);
              if(fabs(D) <= 0.001){
                cout << "x = " << x1 << "." << endl;
              }
    		  else{//Здесь было условие. Но учитывая предыдущее, его смело можно убрать
             cout << "x1 = " << x1 << ";" << endl;
             cout << "x2 = " << x2 << "." << endl;
           }
        }
      }
    }
    catch(...)
    {
      NumError();//Теперь это наверное не надо.
    };
    }
    while (Continue("Escho raz? "));
    return 0;
    }
    Этот код я проверял на 2005 студии, а тот пример был скомпилирован в 6. Код я покоментировал, поэтому должно быть понятно
    Последний раз редактировалось KoVadim; 23.11.2006 в 09:44.


  2. Вверх #22
    pHp-ProGRaMMeR Аватар для NoXX
    Пол
    Мужской
    Возраст
    34
    Сообщений
    1,690
    Репутация
    320
    скомпилил - теперь при вводе НЕ числа просто выдается сообщение, а повтор не выдается (было скомпилено в Microsoft Visual C++ 6.0).
    In TRANCE I trust...

  3. Вверх #23
    pHp-ProGRaMMeR Аватар для NoXX
    Пол
    Мужской
    Возраст
    34
    Сообщений
    1,690
    Репутация
    320
    кстати, инфа на счет Linker'a потребовалась и на CBuilder 2002 (у мну такой)
    ну и напоследок та консольная прога, которая была в этом топике предыдущей - только в виде форточек думаю, выглядит по лучше, чем в консоли...
    Вложения
    In TRANCE I trust...

  4. Вверх #24
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Значит ты разобрался с своей дилеммой?
    А новая прога плохо реагирует на а=0. Недоработка

  5. Вверх #25
    pHp-ProGRaMMeR Аватар для NoXX
    Пол
    Мужской
    Возраст
    34
    Сообщений
    1,690
    Репутация
    320
    кто может записать CBuilder 2005 или 2006 - отзовитесь!
    In TRANCE I trust...

  6. Вверх #26
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Turbo или полный? Если полный, то 4 компакта готовь. Но ты в добавок и Делфи получаеш и прочи радости

  7. Вверх #27
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    вообщето это плохой стиль
    catch (...)

  8. Вверх #28
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Почему? Потому что не знаем, что обработали?
    Предложите лучше

  9. Вверх #29
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    да, потому что незнаем что обработали. это грубо и не по европейски. у нас за такой стиль сразу баг открывают.

  10. Вверх #30
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Ну если нормально обработчик приписать, то дуумаю сойдёт.

  11. Вверх #31
    pHp-ProGRaMMeR Аватар для NoXX
    Пол
    Мужской
    Возраст
    34
    Сообщений
    1,690
    Репутация
    320
    Цитата Сообщение от Ull9
    да, потому что незнаем что обработали. это грубо и не по европейски. у нас за такой стиль сразу баг открывают.
    а какой именно обработчик надо написать в этом случае?

  12. Вверх #32
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    в данном случае уже никакой, тк, уже и эксепшн никакой и не сыпется.

  13. Вверх #33
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Ull9
    А вот здесь у нас уже б ругались. Лучше один раз застраховаться и кричать "У нас неопознаная ошибка", чем пустить в разнос прогу

  14. Вверх #34
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    лучше один раз обрушить прогу чем закричать у нас неопознанная ошибка.
    аргументы следующие:
    что значить закричать? наверное это просто записать аларм в лог файл, или выдать предупреждающее сообщение на экран. но это ОЗНАЧАЕТ что программа продолжает работать дальше. в свою очередь это означает, что у нее уже пошло что-то нетак, уже данные запорчены. т.е. начнут писаться/распространятся неверные данные далее по сети или уйдут в базу данных, варианты бесконечны
    поэтому лучше обрушить. разобратся, пофиксить.

    поверь многие уже понабивали шишки... не нужно опять на эти грабли.

    лучше крашнуть прогу немедленно
    а при непойманном эксепшене будет именно крэш.

    никаких катч три точки. за это горько трахнут.
    Последний раз редактировалось Ull9; 28.11.2006 в 13:18.

  15. Вверх #35
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Для того, что бы они не распространялись, ничего страшного не писалось, нужно обработать это всё дело. Проверить все обекты. На крайняк хотябы засейвить данные и перезапуститься. Пользователь не будет сильно доволен, если прога слетела и ничего не предложила

  16. Вверх #36
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    и да и нет, зависит от среды, например можно повесить какой нибудь сервис который следит за программами и их перезапускает.
    а насчет перепроверить, это сложно. но правило такое
    катч ... это плохо,
    также плохо как например
    sleep(1);

  17. Вверх #37
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Ну вот сразу сервис дополнительный. Перепроверить можно, это же твоя прога.

  18. Вверх #38
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    перепроверить ВСЕ невозможно. даже частично перепроверить нельзя. как ты будешь проверять?
    кроме того во время проверки может произойти очередной ексепшн или даже undefined behaviour
    дальше капут
    не нужно придумывать что то новое. надо следовать проверенной практике.

  19. Вверх #39
    pHp-ProGRaMMeR Аватар для NoXX
    Пол
    Мужской
    Возраст
    34
    Сообщений
    1,690
    Репутация
    320
    народ, никто не знает, как в Си++ число в степень возводить (например в дробную)? Полазил по мануалу Билдера, так ничего и не нашел...
    In TRANCE I trust...

  20. Вверх #40
    Новичок Аватар для Vic87
    Пол
    Мужской
    Сообщений
    16
    Репутация
    10
    посмотри функцию pow


Ответить в теме
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Похожие темы

  1. Как в С++ Builder создать екзешник...
    от man_odessa в разделе Программирование
    Ответов: 3
    Последнее сообщение: 29.11.2007, 08:52
  2. C++ Builder 6 Вопросы
    от Badboyskiller в разделе Программирование
    Ответов: 4
    Последнее сообщение: 25.10.2007, 23:43
  3. C++ Builder
    от Serega_mexanik в разделе Программирование
    Ответов: 16
    Последнее сообщение: 14.03.2007, 06:20
  4. mysql и C++ Builder
    от Jeno в разделе Программирование
    Ответов: 1
    Последнее сообщение: 23.11.2004, 16:44
  5. Есть компилятор С++ типа builder шобы проги компилить на КПК
    от shidox в разделе Программное обеспечение
    Ответов: 7
    Последнее сообщение: 21.09.2004, 13:48

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения